Python 如何将keras ImageDataGenerator类应用于TFRecordsDataset以增强它?
我想从Python 如何将keras ImageDataGenerator类应用于TFRecordsDataset以增强它?,python,tensorflow,keras,Python,Tensorflow,Keras,我想从TFRecords文件中高效地检索示例,并使用kerasImageDataGenerator类对其进行扩充,但据我所知ImageDataGenerator只能对numpy数组、pandas数据帧或目录(由PIL可读的图像组成)进行采样。我还知道,可以使用tf.data.Datset.from_generator()将其转换为tf.data.Dataset对象,但不能转换为逆方法 也许我应该使用ImageDataGenartor.flow\u from\u directory(),但我认为它
TFRecords
文件中高效地检索示例,并使用kerasImageDataGenerator
类对其进行扩充,但据我所知ImageDataGenerator
只能对numpy数组、pandas数据帧或目录(由PIL可读的图像组成)进行采样。我还知道,可以使用tf.data.Datset.from_generator()
将其转换为tf.data.Dataset
对象,但不能转换为逆方法
也许我应该使用ImageDataGenartor.flow\u from\u directory()
,但我认为它速度较慢,尽管我没有用大型数据集精确地测量它。如果它是近似相等的,我将感谢一位说明它的消息来源。下一段代码显示了我希望的示例:
来自tf.keras.preprocessing.image导入ImageDataGenerator
从tf.data导入TFRecordDataset;
导入tensorflow作为tf;
从型号进口DenseNetBN100;
eps=150;批量大小=32;tot_示例=50000;
imre_形状=(32,32,3);lare_形状=(10,);
列车名称为cifar10列车记录;
型号=DenseNetBN100(尺寸较小,形状较大);
定义解析记录(proto,clip=False):
特征={
“image”:tf.FixedLenFeature([],tf.string),
“标签”:tf.FixedLenFeature([],tf.string),
}
示例=tf.parse_single_示例(proto,features)
im=tf.decode_raw(例如['image'],tf.float32)
im=tf.重塑(im,imre_形状)
la=tf.decode_raw(例如['label'],tf.int8)
la=tf。重塑(la,lare_形);
la=tf.cast(la,tf.32);
返回im,la;
dtst=TFRecordDataset(train\u fname).map(\u parse\u record)
dtst=dtst.重复(eps).洗牌(10000)
dtst=dtst.批次(批次大小)
列车\数据发生器=图像数据发生器(
旋转范围=40,
宽度\偏移\范围=0.2,
高度\位移\范围=0.2,
剪切范围=0.2,
缩放范围=0.2,
水平翻转=真,
填充模式(最近的);
列车发电机=列车数据生成流(dtst)
模型安装(列车发电机,epochs=eps
每个历元的步数=总步数示例//批量大小)
由于tf.data.Dataset
管理,通过将ImageDataGenerator
转换为tf.data.Dataset
,仍然有可能获得更高的效率。但这仍然只是另一种理论,我认为拥有可靠的数据源比只使用稀疏的个人测量数据要好