首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >关于Keras中ImageDataGenerator类的两个问题

关于Keras中ImageDataGenerator类的两个问题
EN

Stack Overflow用户
提问于 2018-04-15 16:47:09
回答 1查看 617关注 0票数 0

关于“用Python进行深度学习”的以下代码,我有两个问题:

代码语言:javascript
运行
复制
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函数传递它们呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-17 11:32:57

  1. 使用独立的生成器进行培训和验证的原因是,在这两种情况下,您对数据的处理方式不同。例如,在处理成批图像时,在培训期间,您需要在每个时期对您的图像进行洗牌,这样您的模型就不太适合培训数据。而在测试或验证过程中并不需要它。此外,您可以在训练时执行特殊的数据增强技术(如缩放、移位、旋转),以提高您的训练数据并使模型健壮。您不需要在验证经过培训的模型时执行任何此类操作。因此,为了在生成批处理时适应这些差异,建议为您的培训和验证提供独立的生成器。
  2. ImageDataGenerator是Keras中的一类Image preprocessing。它用于生成具有实时数据增强功能的成批数据.rescale是它的一个参数,而您提到的其他参数(例如,batch_sizetarget_size)并不是它的参数列表的一部分。这些都是在flow_from_directory,下列出的,这是Image preprocessing的一个函数。这个函数使用ImageDataGenerator作为基类.您可以在Keras文档中找到有关各种函数及其相应的参数列表的更多细节,以便进行图像预处理。

希望这能有所帮助!

编辑

这种论点选择背后的理由是什么?

如果您查看源代码,您将注意到,诸如重新缩放、规范化、旋转等操作都是特定于图像的操作。因此,它们被称为基类(ImageDataGenerator)本身的参数。默认情况下,在它下定义的所有函数都继承这些函数。然而,参数,如文件夹路径,批大小,颜色模式,洗牌等是数据加载特定的参数。因此,它们需要由数据加载器(从文件夹读取图像)函数(即flow_from_directoryflow )来处理。加载图像后,它们将进行基类中指定为参数的操作。因此,可以选择这样一个论证清单。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49844416

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档