Ome*_*lan 3 python image-processing conv-neural-network keras tensorflow
我使用以下代码使用发票图像训练 CNN 模型。
train_datagen = ImageDataGenerator(
rescale = 1. / 255,
shear_range = 0.2,
zoom_range = 0.2,
horizontal_flip = True
)
test_datagen = ImageDataGenerator(rescale = 1. / 255)
train_generator = train_datagen.flow_from_directory(train_data_dir,
target_size =(img_width, img_height),
batch_size = batch_size)
validation_generator = test_datagen.flow_from_directory(
validation_data_dir,
target_size =(img_width, img_height),
batch_size = batch_size)
model.fit_generator(train_generator,
steps_per_epoch = nb_train_samples // batch_size,
epochs = epochs, validation_data = validation_generator,
validation_steps = nb_validation_samples // batch_size)
Run Code Online (Sandbox Code Playgroud)
问题是我在训练数据集中只使用了直立图像。我所有的图像都如下图所示:
训练结束后,当我想发送如下所示的图像时,我的模型无法预测其正确的类别。
如下所示,我将horizontal_flip = True发送到ImageDataGenerator
train_datagen = ImageDataGenerator(
rescale = 1. / 255,
shear_range = 0.2,
zoom_range = 0.2,
horizontal_flip = True
)
Run Code Online (Sandbox Code Playgroud)
我如何更改我的代码,以便它可以预测翻转的图像。或者我应该在训练数据集中使用手动翻转图像?
我会随机旋转图像ImageDataGenerator。只需指定以下参数:
旋转范围:整数。随机旋转的度数范围。
或者,您可以传递一个预处理函数,ImageDataGenerator这会给您带来更大的灵活性。
def orthogonal_rot(image):
return np.rot90(image, np.random.choice([-1, 0, 1]))
train_generator = ImageDataGenerator(
preprocessing_function=orthogonal_rot)
Run Code Online (Sandbox Code Playgroud)
此函数将旋转 -90 度、0 度或 90 度。
(该np.rot90()函数将图像旋转 90 度乘以第二个参数。相应地,-1 为 -90 度,0 为不旋转,1 为 90 度,2 为 180 度。)