如何在不使用model.fit_generator的情况下对Keras中的图像应用旋转?

我正在使用卷积神经网络进行图像像素分类问题。我的训练images大小为128x128x3,标签mask的大小为128x128

我在Keras中进行训练的方式如下:

Xtrain, Xvalid, ytrain, yvalid = train_test_split(images, masks,test_size=0.3, random_state=567)model.fit(Xtrain, ytrain, batch_size=32, epochs=20, verbose=1, shuffle=True, validation_data=(Xvalid, yvalid))

然而,我希望对Xtrainytrain应用随机二维旋转,它们的大小分别为128x128x3128x128。更具体地说,我希望在每次epoch迭代时应用这种旋转。

目前,我希望继续使用model.fit,而不使用model.fit_generator,因为我知道数据增强通常是通过.fit_generator完成的。

所以,本质上,我希望循环model.fit,这样Xtrainytrain在每个epoch都会随机旋转。我是Python和Keras的新手,所以如果这有可能实现,任何见解都是欢迎的。


回答:

这是一个使用ImageDataGenerator将输出保存到指定目录的示例,从而绕过使用model.fit_generator的要求。

from keras.preprocessing.image import ImageDataGenerator, array_to_img, img_to_array, load_imgdatagen = ImageDataGenerator(        rotation_range=40,        width_shift_range=0.2,        height_shift_range=0.2,        shear_range=0.2,        zoom_range=0.2,        horizontal_flip=True,        fill_mode='nearest')img = load_img('data/train/cats/cat.0.jpg')  # 这是一个PIL图像x = img_to_array(img)  # 这是一个形状为(3, 150, 150)的Numpy数组x = x.reshape((1,) + x.shape)  # 这是一个形状为(1, 3, 150, 150)的Numpy数组# 下面的.flow()命令生成一批随机变换的图像# 并将结果保存到`preview/`目录i = 0for batch in datagen.flow(x, batch_size=1,                          save_to_dir='preview', save_prefix='cat', save_format='jpeg'):    i += 1    if i > 20:        break  # 否则生成器将无限循环

摘自这里:https://blog.keras.io/building-powerful-image-classification-models-using-very-little-data.html

您可以更改参数以适应您的用例,然后生成您的X_train和X_valid或任何数据集,然后加载到内存中并使用普通的model.fit。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注