我正在使用卷积神经网络进行图像像素分类问题。我的训练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))
然而,我希望对Xtrain
和ytrain
应用随机二维旋转,它们的大小分别为128x128x3
和128x128
。更具体地说,我希望在每次epoch迭代时应用这种旋转。
目前,我希望继续使用model.fit
,而不使用model.fit_generator
,因为我知道数据增强通常是通过.fit_generator
完成的。
所以,本质上,我希望循环model.fit
,这样Xtrain
和ytrain
在每个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。