这是训练模型的数据扩充的正确方法吗?
Is it the right way for data augumentation for training a model?
我是 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)
这是一种正确的方法,但是您可以使用 steps_per_epoch=len(train_batches)
和 validation_steps=len(val_batches)
,以便在添加更多数据时更轻松。您也可以只在 valid
中包含 test
,因为即使您单独使用它们也无济于事。
编辑:
正如@Matias 指出的那样,您不应在验证时使用扩充。因此,正如我在评论中所说的那样,这并非完全错误,但并非完全正确。
实际上这是不正确的,因为您的编码方式是对验证集和测试集应用数据扩充,而您应该只对训练集应用扩充。
您需要为验证集和测试集创建 ImageDataGenerator
的第二个实例,没有任何扩充集。
我是 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)
这是一种正确的方法,但是您可以使用 steps_per_epoch=len(train_batches)
和 validation_steps=len(val_batches)
,以便在添加更多数据时更轻松。您也可以只在 valid
中包含 test
,因为即使您单独使用它们也无济于事。
编辑:
正如@Matias 指出的那样,您不应在验证时使用扩充。因此,正如我在评论中所说的那样,这并非完全错误,但并非完全正确。
实际上这是不正确的,因为您的编码方式是对验证集和测试集应用数据扩充,而您应该只对训练集应用扩充。
您需要为验证集和测试集创建 ImageDataGenerator
的第二个实例,没有任何扩充集。