tf.data.Dataset.from_tensor_slices(tensor):
-->将tensor沿其第一个维度切片,返回一个含有N个样本的数据集(假设tensor的第一个维度为N).
-->得到的数据集是一个类对象,具有“迭代器”等函数,方便遍历数据集中的样本。
-->缺点:需要将整个数据集整体传入,然后切片建立数据集类对象。比较占内存。
-->代码示例,参考:https://blog.youkuaiyun.com/oMoDao1/article/details/84387588
tf.data.Dataset.from_generator():从一个生成器读取样本。函数参数如下:
-->tf.data.Dataset.from_generator(data_generator,output_data_type,output_data_shape).
-->其中data_generator需要自己定义,每次yield一个样本。
-->from_generator函数返回一个类对象,类对象通过传入的data_generator函数获取数据集数据,
类对象内部具有“迭代器”函数,通过迭代器与自定义的data_generator遍历数据集。
-->from_generator函数返回类对象的其他函数:
1) dataset.prefetch(buffer_size=1000)
2)dataset.shuffle(buffer_size=1000).batch(batch_size)
3)iter = dataset.make_one_shot_iterator()
batch_data = iter.get_next()
--> 优点:通过自定义的生成器不断传入样本数据,用dataset.prefetch(buffer_size=1000)中的buffer_size限制放入内存的样本的个数
-->代码示例,参考https://blog.youkuaiyun.com/foreseerwang/article/details/80572182
https://blog.youkuaiyun.com/ONE_SIX_MIX/article/details/80633187
################################################################################
总结:当数据集比较大时,建议使用tf.data.Dataset.from_generator()。
本文介绍了TensorFlow中两种创建数据集的方法。tf.data.Dataset.from_tensor_slices(tensor)将tensor沿首维切片创建数据集,使用方便但占内存;tf.data.Dataset.from_generator()从生成器读取样本,可限制内存中样本个数。数据集较大时,建议使用后者。
1909

被折叠的 条评论
为什么被折叠?



