关于“深度学习Python”中的以下代码,我有两个问题:
from keras.preprocessing.image import ImageDataGenerator
train_datagen = ImageDataGenerator(rescale=1./255)
test_datagen = ImageDataGenerator(rescale=1./255)
train_generator = train_datagen.flow_from_directory(
train_dir, target_size=(150, 150) batch_size=20, class_mode='binary')
validation_generator = test_datagen.flow_from_directory(
validation_dir, target_size=(150, 150),batch_size=20, class_mode='binary')
1)为什么为测试数据定义了新的生成器?为什么不只使用train_datagen
对象两次,一次用于train_dir,一次用于validation_dir?
2)为什么ImageDataGenerator
构造函数和flow_from_directory
函数的定义是这样的:rescale
参数通过构造函数和其他一些参数传递,例如{{1}通过target_size
函数传递?为什么不通过构造函数或flow_from_drictory
函数传递所有这些?
答案 0 :(得分:1)
Image preprocessing
的类。它用于通过实时数据增强生成批量数据。 rescale
是其中一个参数,而您提到的其他参数(例如,batch_size
,target_size
)不属于它的参数列表。这些列在 flow_from_directory 下,它是Image preprocessing
的函数。此函数使用 ImageDataGenerator 作为基类。您可以在Keras documentation中找到有关各种函数及其相应的参数列表的更多详细信息,以进行图像预处理。希望这有帮助!
修改强>
这种选择背后的理由是什么?
如果您查看source code,您会注意到重新缩放,规范化,轮换等操作,ETC是特定于图像的操作。因此,它们被提及为基类( ImageDataGenerator )本身的参数。默认情况下,它下面定义的所有函数都会继承它们。然而,诸如文件夹路径,批量大小,颜色模式, shuffling 等参数,ETC是数据加载特定参数。因此,它们需要由数据加载器(从文件夹读取图像)功能来处理,这些功能是 flow_from_directory 和 flow 。加载图像后,它们将在基类中进行指定为参数的操作。因此可以选择参数列表。