问题描述
我创建了一个数据生成器类的两个实例,从 keras Sequence 类扩展而来,一个用于训练,另一个用于验证数据。但是,在我的源代码级别,我只能看到验证生成器在每个 epoch 之间重新迭代。我看不到训练生成器。因此,我无法验证训练数据的增强是否符合我的意图。在这些代码片段中,aug 是一个参数字典,这些参数将转到我的 myDataGen Sequence 扩展中的 keras ImageDataGenerator 实例。我通常不会增加验证数据,但这就是我偶然发现这个难题的原因:
aug = dict(fill_mode='nearest',rotation_range=10,zoom_range=0.3,width_shift_range=0.1,height_shift_range=0.1
)
training_datagen = myDataGen(Xdata_train,ydata_train,**aug)
validation_datagen = myDataGen(Xdata_test,ydata_test,**aug)
history = model.fit(training_datagen,validation_data=validation_datagen,validation_batch_size=16,epochs=50,shuffle=False,)
一切正常,我得到了很好的结果,但我只是想确定增强。所以我可以通过浏览 keras 中的各种函数来收集我编写的数据生成器填充一个较低级别的 tensorflow 数据集,然后每个 epoch 进行迭代。我只是看不到 tensorflow 数据集是如何在每个 epoch 中得到增强的。
现在,我还意外地发现,尽管 fit 方法不支持验证数据上的生成器,但它确实有效,并且具有我希望用于训练生成器的有趣功能,即重新-从磁盘读取数据,以便在我自己的源代码级别重新扩充。
最重要的是,我可以看到 tensorflow Dataset.cache() 方法可能在第一个纪元之后将我的训练数据集存储在内存中的提示。我可以以某种方式 uncache() 强制重新读取和重新扩充,或者有人可以指出张量流数据集在迭代时如何调用扩充方法吗?
嗯。此线程 InsertOnConflictWhereStep 明确指出直接在 tensorflow Dataset API 中编写增强方法很容易,但贡献者在评论中写道,您不能在 tf.data.Dataset 上使用 keras.ImageDataGenerator。但是我可以在 keras 模块中清楚地看到,我的 keras 数据集正在“适应”到基础 tf.data.Dataset 中。如果此评论属实,它将解释为什么我似乎无法打破我的训练数据的 ImageDataGenerator 增强。但这怎么可能是真的?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)