这是用于训练模型的数据扩充的正确方法吗?

时间:2019-09-10 21:47:31

标签: keras deep-learning data-augmentation

我对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)

2 个答案:

答案 0 :(得分:0)

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

编辑:

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

答案 1 :(得分:0)

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

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