我有一个训练数据集,准备如下:
Irrlicht.lib
FileName
s01_l01/1_1.png
Labels_onehot
[[0.0, 0.0, 0.0,..., 1.0],..., [0.0, 0.0, 1.0,..., 0.0]]
直接导致输入图像。我想对图像进行预处理(将它们调整为(224,224)并重新缩放为(1./255)。FileName
是一个热编码的标签。这些不必进一步预处理。
最后,经过预处理的图像是我的Labels_onehot
数据。
X_train
标签是X_train.shape
(n, 224, 224, 3)
数据。
y_train
到目前为止,我正在手动预处理图像,然后加载预处理的图像(一个数据集)和标签(其他数据集)。这不是一种非常有效的方法,它会完全填满我的RAM。
但是最终,我能够相对容易地拟合我的模型,例如使用以下代码:
y_train.shape
(n, 8, 36)
现在,我想知道如何使用model.fit(X_train, y_train, epochs=50, batch_size=32)
实现相同的目标。有没有一种方法可以手动执行我之前执行的所有步骤?
答案 0 :(得分:1)
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)
flow函数返回一个生成器,它是一个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