使用tf.data.Dataset.from_tensor_slices()加载数据是否会保留样本顺序?
顺序保留情况分两种场景说明
仅运行你给出的代码时
tf.data.Dataset.from_tensor_slices()本身会严格保留输入序列的顺序,你输入的文件名列表是['1.tfrecord', '2.tfrecord', '3.tfrecord'],这一步生成的数据集存储的是文件名字符串,输出顺序和你输入的列表完全一致,不会乱序。加载文件内的样本时
最终样本的顺序取决于你后续的数据集处理逻辑:- 如果你使用
map串行读取每个TFRecord文件的内容,不添加其他乱序操作,样本顺序会完全保留:先输出1.tfrecord内的40个样本(按文件内部存储的顺序排列),再输出2.tfrecord的30个样本,最后输出3.tfrecord的70个样本。 - 如果你使用
interleave并行加载多个TFRecord文件,默认会交替输出不同文件的样本,不会保持「先输出完第一个文件所有样本再输出第二个」的排列顺序;如果需要在并行加载时仍保持原文件的先后输出逻辑,需要将interleave的cycle_length参数设置为1,关闭多文件并行读取。 - 如果后续流程添加了
shuffle这类随机打乱操作,样本顺序会被随机重排,不再保留原有顺序。
- 如果你使用
内容的提问来源于stack exchange,提问作者eng2019
相关产品推荐
相关产品推荐

