python - 使用 ImageDataGenerator 进行随机正交、90 度旋转
问题描述
我使用以下代码用发票图像训练我的 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)
问题是我在训练数据集中只使用了直立图像。我所有的图像都如下图所示:
训练后,当我想发送如下图像时,我的模型无法预测其正确的类别。
如下所示,我将 Horizontal_flip = True 发送到ImageDataGenerator
train_datagen = ImageDataGenerator(
rescale = 1. / 255,
shear_range = 0.2,
zoom_range = 0.2,
horizontal_flip = True
)
如何更改我的代码,以便它可以预测甚至翻转的图像。或者我应该在我的训练数据集中使用手动翻转的图像?
解决方案
我会随机旋转图像ImageDataGenerator
。只需指定以下参数:
旋转范围:诠释。随机旋转的度数范围。
或者,您可以传递一个预处理函数,ImageDataGenerator
从而为您提供更大的灵活性。
def orthogonal_rot(image):
return np.rot90(image, np.random.choice([-1, 0, 1]))
train_generator = ImageDataGenerator(
preprocessing_function=orthogonal_rot)
此函数将旋转 -90、0 或 90 度。
推荐阅读
- python - KeyError:使用带有布尔值的 get_loc 时为真
- java - 如何使用 Elasticsearch API ScriptQueryBuilder
- angular - 如何在我的 Angular 应用程序中调试 node_module?
- java - 在类的类型参数上设置实际类型的所有方法是什么
- html - CSS渐变重复
- apache-spark - 监控 Spark 应用程序的执行者
- typescript - 如何设置 Appium-Webdriver.io-project 来编译 typescript 文件?[错误@wdio/cli:launcher:没有找到运行的规范,退出失败]
- flutter - Flutter 表日历更新 Firestore 数据
- java - Dagger Hilt Android 的编译时错误:okhttp3.Interceptor cannot be provided without an @Provides-annotated method
- python - 如何运行python循环直到输入正确的输入字符串