随着 Keras2 即将在 TensorFlow 和 TensorFlow 2.0 中实现,您应该将 KerasImageDataGenerator 与 eg 一起使用,flow_from_directory还是现在tf.data也可以与fit_genearatorKeras一起使用的 TensorFlow ?
这两种方法是否会因服务于不同的目的而占有一席之地,还是会tf.data成为未来的新方法而 Keras 生成器将被弃用?
谢谢,我想走这条路,让我在这个快速发展的领域保持更长时间的了解。
如果我查看 keras 指标,y_true我会发现和 的值y_predict“只是”在每个纪元结束时进行比较categorical_accuracy:
def categorical_accuracy(y_true, y_pred):
return K.cast(K.equal(K.argmax(y_true, axis=-1),
K.argmax(y_pred, axis=-1)),
K.floatx())
Run Code Online (Sandbox Code Playgroud)
如何处理屏蔽值?如果我理解正确的话,屏蔽会禁止屏蔽值影响训练,但它仍然会产生屏蔽值的预测。因此,在我看来,它确实影响了指标。
关于它如何影响指标的更多解释:
在填充/屏蔽过程中,我将填充/屏蔽值设置y_true为未使用的类,例如 class 0。如果现在argmax()正在 one-hot 编码中查找最大值y_true,它将仅返回 0,因为总(屏蔽)行是相同的。我没有类 0,因为它是我的掩码值/类,因此 和y_pred肯定y_true具有不同的值,从而降低了准确性。
Keras 指标中是否已经考虑到了这一点并且我监督了它?
否则,我将不得不创建一个自定义指标或回调,创建一个类似的指标,并在比较中和之前categorical_accuracy消除所有屏蔽值。y_predy_true
对于菜鸟问题很抱歉,但是我如何杀死 Tensorflow PID?
它说:
Reusing TensorBoard on port 6006 (pid 5128), started 4 days, 18:03:12 ago. (Use '!kill 5128' to kill it.)
但是我在 windows taks 管理器中找不到任何 PID 5128。在 jupyter 中使用 '!kill 5128' 错误返回找不到命令 kill 。在 Windows cmd 或 conda cmd 中使用它也不起作用。
谢谢你的帮助。
我正在用熊猫读取 csv 文件,并给出存储在 colname
colnames=['file', 'label']
# Read data from file
data = pd.read_csv('./Hand_Annotations_2.csv',names=colnames, header=None)
# Preview the first 5 lines of the loaded data
data.head()
Run Code Online (Sandbox Code Playgroud)
然后,我使用ImageDataGenerator()和flow_fromdataframe()来获取批量数据
train_generator=datagen.flow_from_dataframe(dataframe=data,
directory=None,
x_col=colnames[0],
y_col=colnames[1],
class_indices=IDmap,
class_mode="categorical", target_size=(224,224), batch_size=32)
Run Code Online (Sandbox Code Playgroud)
但我收到一个错误,如下所示:
类型错误:如果 class_mode="categorical",y_col="label" 列值必须是字符串、列表或元组类型。
但我的y_col是一个字符串。如果我只是输入,我会得到同样的错误"label"。它似乎也适用于x_col.
有人可以指出我的错误吗?
谢谢
解决方案
使用 dtype 例如 str 读取 csv:
data = pd.read_csv('./Hand_Annotations_2.csv',dtype=str,names=colnames, header=None)
Run Code Online (Sandbox Code Playgroud) 我加载了一个已保存的 h5 模型并希望将该模型保存为 pb。在训练期间使用tf.keras.callbacks.ModelCheckpoint回调函数保存模型。
TF 版本:2.0.0a
编辑:2.0.0-beta1 也有同样的问题
我保存 pb 的步骤:
K.set_learning_phase(0)tf.keras.models.load_modelfreeze_session()函数。freeze_session()函数tf.keras.backend.get_session我得到的错误,编译和不编译:
AttributeError:模块“tensorflow.python.keras.api._v2.keras.backend”没有属性“get_session”
我的问题:
TF2没有get_session了?(我知道tf.contrib.saved_model.save_keras_model它不再存在,我也试过tf.saved_model.save哪些没有真正起作用)
或者get_session只有在我实际训练模型时才有效,而只是加载 h5 不起作用
编辑:同样在新训练的会话中,没有 get_session 可用。
感谢您的帮助
更新:
自 TF2.x 正式发布以来,图形/会话概念发生了变化。该savedmodelAPI应该被使用。您可以将tf.compat.v1.disable_eager_execution()与 TF2.x 一起使用,它将生成一个 pb 文件。但是,我不确定它是哪种 pb 文件类型,因为保存的模型组合从 TF1 更改为 TF2。我会继续挖掘。
使用fit_generatorKeras,steps_per_epoch应相当于样本的可用总数除以batch_size.
但是fit_generator如果我选择一个batch_size不适合样品n次的发生器或反应怎么样呢?它是否会产生样品,直到它不能再填充整体batch_size,或者只是使用较小的样品batch_size进行最后的产量?
为什么我要问:我将我的数据划分为不同大小(不同%)的训练/验证/测试,但是对于训练和验证集使用相同的批量大小,但对于训练和测试集尤其如此.由于它们的尺寸不同,我不能保证批量大小适合样品的总量.
我想使用最新的tensorflow 2.0.0a0在jupyter中运行tensorboard。使用tensorboard版本1.13.1和python 3.6。
使用
...
%tensorboard --logdir {logs_base_dir}
我得到错误:
UsageError: Line magic function %tensorboard not found
您知道可能是什么问题吗?似乎所有版本都是最新的,该命令似乎也正确。
谢谢
基于这篇文章。我需要一些基本的实施帮助。下面你会看到我使用 Dropout 层的模型。使用 noise_shape 参数时,碰巧最后一批不适合批量大小,从而产生错误(请参阅其他帖子)。
原型号:
def LSTM_model(X_train,Y_train,dropout,hidden_units,MaskWert,batchsize):
model = Sequential()
model.add(Masking(mask_value=MaskWert, input_shape=(X_train.shape[1],X_train.shape[2]) ))
model.add(Dropout(dropout, noise_shape=(batchsize, 1, X_train.shape[2]) ))
model.add(Dense(hidden_units, activation='sigmoid', kernel_constraint=max_norm(max_value=4.) ))
model.add(LSTM(hidden_units, return_sequences=True, dropout=dropout, recurrent_dropout=dropout))
Run Code Online (Sandbox Code Playgroud)
现在 Alexandre Passos 建议使用tf.shape获取运行时批量大小。我试图以不同的方式将运行时批量大小的想法实现到 Keras 中,但从未奏效。
import Keras.backend as K
def backend_shape(x):
return K.shape(x)
def LSTM_model(X_train,Y_train,dropout,hidden_units,MaskWert,batchsize):
batchsize=backend_shape(X_train)
model = Sequential()
...
model.add(Dropout(dropout, noise_shape=(batchsize[0], 1, X_train.shape[2]) ))
...
Run Code Online (Sandbox Code Playgroud)
但这只是给了我输入张量形状,而不是运行时输入张量形状。
我也尝试使用 Lambda 层
def output_of_lambda(input_shape):
return (input_shape)
def LSTM_model_2(X_train,Y_train,dropout,hidden_units,MaskWert,batchsize):
model = Sequential()
model.add(Lambda(output_of_lambda, outputshape=output_of_lambda))
...
model.add(Dropout(dropout, noise_shape=(outputshape[0], 1, X_train.shape[2]) …Run Code Online (Sandbox Code Playgroud) keras ×6
tensorflow ×6
python ×4
generator ×2
keras-2 ×2
tensorboard ×2
layer ×1
metrics ×1
runtime ×1
tf.keras ×1