数据增强损害准确性Keras

时间:2018-08-05 06:52:06

标签: keras deep-learning transfer-learning data-augmentation

我正在尝试使用Python进行深度学习 第5.3节“通过数据增强进行特征提取” 来解决带有resnet50(图像网络权重)的3类问题。

位于https://github.com/morenoh149/plantdisease的完整代码

Task<SolrSearchResults> GetSolrSearchResults(List<string> batch)

问题:

  • 这本书对ImageDataGenerator并选择List<List<string>> termsBatches = new List<List<string>>() { new List<string>() { "apple", "banana" }, new List<string>() { "cat", "dog" }, }; IObservable<SolrSearchResults> query = from batch in termsBatches.ToObservable() from result in Observable.FromAsync(() => GetSolrSearchResults(batch)) select result; IDisposable subscription = query .Subscribe(result => { //Process result }); 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) 并没有多大帮助。这些值应该是什么? 我有3个班级,每个班级有1000张图片。我将其拆分为60/20/20训练/验证/测试。
  • 我无需进行数据扩充就能获得60%的验证精度。上面我已经简化了ImageDataGenerator以仅重新缩放。该模型的验证精度为何为30%?
  • 我需要对该脚本的数据增强版本进行哪些更改,以使其准确性与不进行扩充相符?

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

1 个答案:

答案 0 :(得分:0)

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

通常,steps_per_epoch是数据集的大小除以批处理大小。