关于“用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参数,而其他一些参数(如target_size )则通过flow_from_drictory函数传递?为什么不直接通过构造函数或flow_from_directory函数传递它们呢?
发布于 2018-04-17 11:32:57
Image preprocessing。它用于生成具有实时数据增强功能的成批数据.rescale是它的一个参数,而您提到的其他参数(例如,batch_size、target_size)并不是它的参数列表的一部分。这些都是在flow_from_directory,下列出的,这是Image preprocessing的一个函数。这个函数使用ImageDataGenerator作为基类.您可以在Keras文档中找到有关各种函数及其相应的参数列表的更多细节,以便进行图像预处理。希望这能有所帮助!
编辑
这种论点选择背后的理由是什么?
如果您查看源代码,您将注意到,诸如重新缩放、规范化、旋转等操作都是特定于图像的操作。因此,它们被称为基类(ImageDataGenerator)本身的参数。默认情况下,在它下定义的所有函数都继承这些函数。然而,参数,如文件夹路径,批大小,颜色模式,洗牌等是数据加载特定的参数。因此,它们需要由数据加载器(从文件夹读取图像)函数(即flow_from_directory和flow )来处理。加载图像后,它们将进行基类中指定为参数的操作。因此,可以选择这样一个论证清单。
https://stackoverflow.com/questions/49844416
复制相似问题