python - Keras:在 `crossentropy` 中使用 `flow_from_directory` 损失

标签 python keras

我正在尝试使用 flow_from_directory 来训练我的模型。我使用的损失是 binary_crossentropy ,它需要对 Y_train 数据调用 to_categorical 函数。我不知道如何对 flow_from_directory 执行此操作,并且程序抛出以下错误:

Traceback (most recent call last):
  File "vgg16-sim-conn-rmsprop-2-main.py", line 316, in <module>
    epochs=25
  File "/home/yx96/anaconda2/lib/python2.7/site-packages/keras/legacy/interfaces.py", line 8
8, in wrapper
    return func(*args, **kwargs)
  File "/home/yx96/anaconda2/lib/python2.7/site-packages/keras/engine/training.py", line 187
6, in fit_generator
    class_weight=class_weight)
  File "/home/yx96/anaconda2/lib/python2.7/site-packages/keras/engine/training.py", line 161
4, in train_on_batch
    check_batch_axis=True)
  File "/home/yx96/anaconda2/lib/python2.7/site-packages/keras/engine/training.py", line 129
9, in _standardize_user_data
    exception_prefix='model target')
  File "/home/yx96/anaconda2/lib/python2.7/site-packages/keras/engine/training.py", line 133
, in _standardize_input_data
    str(array.shape))
ValueError: Error when checking model target: expected predictions to have shape (None, 2) b
ut got array with shape (100, 1)

我使用的数据生成器是:

train_datagen = ImageDataGenerator(
    featurewise_center=True,
    horizontal_flip=True,
    zoom_range=0.2,
    data_format="channels_last"
)

train_generator = train_datagen.flow_from_directory(
    './train',
    target_size=(224, 224),
    batch_size=100,
    class_mode='binary'
)

fit_generator 是:

model.fit_generator(
    train_generator,
    steps_per_epoch=2500,
    epochs=25
)

最佳答案

如果您使用 binary_crossentropy 来计算损失,则您正确设置了 class_mode='binary'

您可能失败的地方位于模型的最后一层,因为您没有向我们展示模型,所以这没有显示在您的帖子中。

您可能有一个Dense(2,activation='softmax')。这是“one-hot”或分类交叉熵版本。如果你想使用二进制,你只输出一个介于 0 和 1 之间的值。你可以这样做:

Dense(1, activation = 'sigmoid')

我希望这能解决您的问题:-)

关于python - Keras:在 `crossentropy` 中使用 `flow_from_directory` 损失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45124875/

相关文章:

python - Pandas 中的特定分组依据

python - Keras/Tensorflow 中不同时期的训练率如何变化

python - 损失函数的正确做法

python - 找不到根据键翻译字符串的简单方法

python - 从一个 100x100 的 pytorch 张量获得一个 10x10 的补丁,并在边界周围环绕圆环样式

javascript - 忽略正则表达式中的常规 HTML 标签

python - 如何在 Keras 中展平不同大小的数据并在下一层中使用它

python - 使用Python搜索csv文件并提取所需信息

tensorflow - 如何在 Keras 中使 LSTM 的初始状态可训练?

python - 如何解决此错误 : expected flatten_input to have 3 dimensions, 但得到形状为 (1, 28, 28, 3) 的数组?