小编Flo*_*Man的帖子

Keras2 ImageDataGenerator 还是 TensorFlow tf.data?

随着 Keras2 即将在 TensorFlow 和 TensorFlow 2.0 中实现,您应该将 KerasImageDataGenerator 与 eg 一起使用,flow_from_directory还是现在tf.data也可以与fit_genearatorKeras一起使用的 TensorFlow ?

这两种方法是否会因服务于不同的目的而占有一席之地,还是会tf.data成为未来的新方法而 Keras 生成器将被弃用?

谢谢,我想走这条路,让我在这个快速发展的领域保持更长时间的了解。

python keras tensorflow keras-2

9
推荐指数
3
解决办法
7110
查看次数

屏蔽值如何影响 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

python metrics keras tensorflow

7
推荐指数
1
解决办法
2408
查看次数

如何使用 Tensorflow2 (jupyter, Win) 杀死 tensorboard

对于菜鸟问题​​很抱歉,但是我如何杀死 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 中使用它也不起作用。

谢谢你的帮助。

python tensorflow tensorboard

7
推荐指数
2
解决办法
6442
查看次数

使用 flow_from_dataframe y_col 的正确“值”是什么

我正在用熊猫读取 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)

generator keras tensorflow tf.keras

4
推荐指数
1
解决办法
4553
查看次数

如何使用TF2将加载的h5模型正确保存到pb

我加载了一个已保存的 h5 模型并希望将该模型保存为 pb。在训练期间使用tf.keras.callbacks.ModelCheckpoint回调函数保存模型。

TF 版本:2.0.0a
编辑:2.0.0-beta1 也有同样的问题

我保存 pb 的步骤:

  1. 我先设置 K.set_learning_phase(0)
  2. 然后我加载模型 tf.keras.models.load_model
  3. 然后,我定义freeze_session()函数。
  4. (可选我编译模型)
  5. 然后使用该freeze_session()函数tf.keras.backend.get_session

我得到的错误,编译和不编译:

AttributeError:模块“tensorflow.python.keras.api._v2.keras.backend”没有属性“get_session”

我的问题:

  1. TF2没有get_session了?(我知道tf.contrib.saved_model.save_keras_model它不再存在,我也试过tf.saved_model.save哪些没有真正起作用)

  2. 或者get_session只有在我实际训练模型时才有效,而只是加载 h5 不起作用 编辑:同样在新训练的会话中,没有 get_session 可用。

    • 如果是这样,我将如何在未经培训的情况下将 h5 转换为 pb?有好的教程吗?

感谢您的帮助


更新

自 TF2.x 正式发布以来,图形/会话概念发生了变化。该savedmodelAPI应该被使用。您可以将tf.compat.v1.disable_eager_execution()与 TF2.x 一起使用,它将生成一个 pb 文件。但是,我不确定它是哪种 pb 文件类型,因为保存的模型组合从 TF1 更改为 TF2。我会继续挖掘。

protocol-buffers keras tensorflow keras-2 tensorflow2.0

4
推荐指数
1
解决办法
4830
查看次数

如果steps_per_epoch不适合样本数量怎么办?

使用fit_generatorKeras,steps_per_epoch应相当于样本的可用总数除以batch_size.

但是fit_generator如果我选择一个batch_size不适合样品n次的发生器或反应怎么样呢?它是否会产生样品,直到它不能再填充整体batch_size,或者只是使用较小的样品batch_size进行最后的产量?

为什么我要问:我将我的数据划分为不同大小(不同%)的训练/验证/测试,但是对于训练和验证集使用相同的批量大小,但对于训练和测试集尤其如此.由于它们的尺寸不同,我不能保证批量大小适合样品的总量.

generator keras

3
推荐指数
1
解决办法
1627
查看次数

在Jupyter中找不到Tensorboard作为魔术功能

我想使用最新的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

您知道可能是什么问题吗?似乎所有版本都是最新的,该命令似乎也正确。

谢谢

python tensorflow tensorboard

3
推荐指数
3
解决办法
2465
查看次数

如何获取 Keras 模型的运行时批量大小

基于这篇文章。我需要一些基本的实施帮助。下面你会看到我使用 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)

runtime layer keras

1
推荐指数
1
解决办法
4230
查看次数