【问题标题】:Is it the right way for data augumentation for training a model?它是训练模型的数据增强的正确方法吗?
【发布时间】:2020-01-12 16:09:50
【问题描述】:

我是 keras 和深度学习的新手。我尝试使用数据增强来训练我的模型,但不确定我是否以正确的方式进行操作。谁能向我保证我的方法是正确的?这是我的代码:

train_path = 'Digital_Mamo/OPTIMAM'      # Relative Path
valid_path = 'Digital_Mamo/InBreast'
test_path = 'Digital_Mamo/BCDR'


valid_batches = ImageDataGenerator().flow_from_directory(valid_path, target_size=(224, 224), classes=['Benign', 'Malignant'], batch_size=9)
test_batches = ImageDataGenerator().flow_from_directory(test_path, target_size=(224, 224), classes=['Benign', 'Malignant'], batch_size=7)

datagen = ImageDataGenerator(rotation_range=10, width_shift_range=0.1,
       height_shift_range=0.1, shear_range=0.15, zoom_range=0.1,
       channel_shift_range=10., horizontal_flip=True)

train_batches = datagen.flow_from_directory(
        train_path,
        target_size=(224, 224),
        batch_size=10,
        classes=['Benign','Malignant'])


vgg16_model= load_model('Fetched_VGG.h5')

# transform the model to Sequential
model= Sequential()
for layer in vgg16_model.layers[:-1]:
    model.add(layer)

model.summary()

# Freezing the layers (Oppose weights to be updated)
for layer in model.layers:
    layer.trainable = False


model.add(Dense(2, activation='softmax', name='predictions'))


### Compile the model
model.compile(Adam(lr=.0001), loss='categorical_crossentropy', metrics=['accuracy'])

# train the model
model.fit_generator(train_batches, steps_per_epoch=28, validation_data=valid_batches, validation_steps=3, epochs=5, verbose=2)

#test
predictions = model.predict_generator(test_batches, steps=3, verbose=0)

【问题讨论】:

    标签: keras deep-learning data-augmentation


    【解决方案1】:

    这是一种正确的方法,但是当您添加更多数据时,您可以使用steps_per_epoch=len(train_batches)validation_steps=len(val_batches) 来更轻松地生活。您也可以在 valid 中包含 test,因为即使您单独使用它们也无济于事。

    编辑:

    正如@Matias 指出的那样,您不应该在验证时使用扩充。因此,正如我在评论中所说的那样,这并不完全错误,但并不完全正确。

    【讨论】:

    • 这不是正确的计算方法:steps_per_epoch=(数据集大小)/批量大小?我的训练样本大小是 280,批量大小是 10,所以我设置 steps_per_epoch=28。另一个问题是,是否可以进行数据增强以进行测试和验证?
    • 第一个问题是,但该值已在此处计算 github.com/keras-team/keras-preprocessing/blob/master/… 。因此,如果您可能更改数据,可以使用len 来简化操作。
    • 另一个问题,可能没问题。如果您的增强没有使图像变为无法识别的程度,那很好,但如果训练集无论如何都无法识别,您将不会得到好的结果。但这仍然是个疑问,为什么?
    【解决方案2】:

    实际上这是不正确的,因为您的编码方式是对验证集和测试集应用数据扩充,而您应该只对训练集应用扩充。

    您需要为验证集和测试集创建ImageDataGenerator 的第二个实例,而不需要任何扩充集。

    【讨论】:

    • 是否可以为测试和验证进行数据扩充?
    • @Annanya 不,仅用于训练集
    • 我已经按照您的建议更改了我的代码(在我的主帖中)。我现在做得对吗?
    • @MatiasValdenegro 你能看看这个问题吗? stackoverflow.com/q/58900947/5904928我挣扎了好几个小时,找不到答案。
    猜你喜欢
    • 2021-07-08
    • 1970-01-01
    • 2018-02-17
    • 1970-01-01
    • 2019-06-08
    • 1970-01-01
    • 1970-01-01
    • 2018-06-22
    • 2014-02-21
    相关资源
    最近更新 更多