0

我正在尝试将深度学习与 Python 第 5.3 节特征提取与数据增强适应于 resnet50(imagenet 权重)的 3 类问题。

完整代码在https://github.com/morenoh149/plantdisease

from keras import models
from keras import layers
from keras.applications.resnet50 import ResNet50
from keras import optimizers
from keras.preprocessing.image import ImageDataGenerator

input_shape = (224, 224, 3)
target_size = (224, 224)
batch_size = 20

conv_base = ResNet50(weights='imagenet', input_shape=input_shape, include_top=False)

model = models.Sequential()
model.add(conv_base)
model.add(layers.Flatten())
model.add(layers.Dense(256, activation='relu'))
model.add(layers.Dense(3, activation='softmax'))

conv_base.trainable = False

train_datagen = ImageDataGenerator(rescale=1./255)
test_datagen = ImageDataGenerator(rescale=1./255)
train_generator = train_datagen.flow_from_directory(
    'input/train',
    target_size=target_size,
    batch_size=batch_size,
    class_mode='categorical')
validation_generator = test_datagen.flow_from_directory(
    'input/validation',
    target_size=target_size,
    batch_size=batch_size,
    class_mode='categorical')
model.compile(loss='categorical_crossentropy',
             optimizer=optimizers.RMSprop(lr=2e-5),
             metrics=['acc'])
history = model.fit_generator(
    train_generator,
    steps_per_epoch=96,
    epochs=30,
    verbose=2,
    validation_data=validation_generator,
    validation_steps=48)

问题:

  • 这本书没有过多介绍 ImageDataGenerator 和选择steps_per_epochand validation_steps。这些值应该是什么?我有 3 个班级,每个班级 1000 张图片。我已将其拆分为 60/20/20 训练/验证/测试。
  • 在没有数据增强的情况下,我能够获得 60% 的验证准确度。上面我已将 ImageDataGenerator 简化为仅重新缩放。这个模型的验证准确率为 30% 为什么?
  • 我需要对此脚本的数据增强版本进行哪些更改以匹配不增强的准确性?

更新:这可能是 keras 本身的问题

4

1 回答 1

0

要回答您的第一个问题:steps_per_epoch在考虑一个时期完成之前,训练生成器应该产生的批次数是多少。如果您有 600 个批量大小为 20 的训练图像,这将是每个 epoch 等 30 步。validation_steps将相同的逻辑应用于验证数据生成器,无论是在每个 epoch 结束时。

一般来说,steps_per_epoch是数据集的大小除以批量大小。

于 2018-08-05T08:56:08.160 回答