首页 文章

数据扩充会伤害Keras的准确性

提问于
浏览
0

我正在尝试使用resnet50(图像网权重)来调整使用数据增强功能的第5.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_epochvalidation_steps . 这些 Value 应该是什么?我有3个班,每个1000个图像 . 我把它拆分为60/20/20火车/验证/测试 .

  • 在没有数据增加的情况下,我能够获得60%的验证准确度 . 上面我将ImageDataGenerator简化为仅重新缩放 . 这个模型的验证准确率为30%么?

  • 我需要对此脚本的数据增强版本进行哪些更改以匹配准确性而不进行扩充?

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

1 回答

  • 0

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

    通常, steps_per_epoch 是数据集的大小除以批量大小 .

相关问题