我有一个训练数据集,准备如下:
FileName
s01_l01/1_1.png
Labels_onehot
[[0.0, 0.0, 0.0,..., 1.0],..., [0.0, 0.0, 1.0,..., 0.0]]
FileName
直接导致输入图像。我想对图像进行预处理(将它们的大小调整为(224,224),然后将它们缩放为(1./255)。Labels_onehot
是一个热编码的标签。这些不必进一步预处理。
最后,经过预处理的图像是我的X_train
数据。
X_train.shape
(n, 224, 224, 3)
标签是y_train
数据。
y_train.shape
(n, 8, 36)
直到现在,我正在手动预处理图像,然后加载预处理的图像(一个数据集)和标签(另一个数据集)。这不是一种非常有效的方法,它会完全填满我的RAM。
但是最后,我能够相对容易地拟合模型,例如使用此代码:
model.fit(X_train, y_train, epochs=50, batch_size=32)
[现在,我想知道如何用ImageDataGenerator
实现相同的效果。有没有一种方法可以手动执行我之前执行的所有步骤?
ImageDataGenerator有很多方法
首先,我们将创建ImageDataGenerator的实例。
aug = tf.keras.preprocessing.image.ImageDataGenerator( rotation_range=20,
width_shift_range=0.1, shear_range=0.2, zoom_range=0.4, horizontal_flip=True)
流程函数返回一个生成器,该生成器是用于构造增强图像的Python迭代器对象
flow_train_generator = aug.flow(x_train, y_train, batch_size=32)
flow_from_directory方法返回一个迭代器,该迭代器生成(x,y)元组,其中x是包含一批图像的NumPy数组,而y是对应标签的NumPy数组。
flow_dict_train_generator = aug.flow_from_directory(
'data/train',
target_size=(150, 150),
batch_size=32,
class_mode='binary')
[请注意,每次在生成新批处理之前直接从磁盘读取数据,然后再对数据进行修改,然后再将该批处理传递到网络,因此目录中的流会减慢模型训练过程的速度。] >
更多详细信息,请参考以下链接:https://www.tensorflow.org/api_docs/python/tf/keras/preprocessing/image/ImageDataGenerator