我已生成数据并将其保存到多个tfrecord文件中,然后将其加载到TFRecordDataset中。 如何通过文件对这个数据集进行混洗?也就是说,我想保持样本inside文件的顺序,但是在创建批处理数据集时仅随机化文件的加载顺序。考虑以下示例:
数据
file_1
file_1_s1
file_1_s2
file_1_s3
file_2
file_2_s1
file_2_s2
file_2_s3
file_3
file_3_s1
file_3_s2
file_3_s3
法律样本订购
file_1_s2, file_1_s2, file_1_s3, file_3_s1, file_3_s2, file_3_s3, file_2_s1, file_2_s2, file_2_s3
file_3_s1, file_3_s2, file_3_s3, file_2_s1, file_2_s2, file_2_s3, file_1_s2, file_1_s2, file_1_s3
非法样品订购
file_1_s2, file_1_s3, file_3_s3, file_2_s1, file_2_s2, file_1_s2, file_3_s2, file_3_s1, file_2_s3
file_3_s1, file_2_s1, file_3_s3, file_2_s2, file_2_s3, file_1_s2, file_1_s2, file_1_s3, file_3_s2
在非法示例中,一个文件的样本不再一起出现或顺序出现。
您可以如下使用tf.data.Dataset.list_files
来随机播放TFRecord
文件。
filepaths = ["data.tfrecords","data1.tfrecords","data2.tfrecords","data3.tfrecords"]
filepath_dataset = tf.data.Dataset.list_files(filepaths, seed=42)
print(filepath_dataset)
<ShuffleDataset shapes: (), types: tf.string>
for file in filepath_dataset:
print(file)
随机数据集:
tf.Tensor(b'./data1.tfrecords', shape=(), dtype=string)
tf.Tensor(b'./data3.tfrecords', shape=(), dtype=string)
tf.Tensor(b'./data2.tfrecords', shape=(), dtype=string)
tf.Tensor(b'./data.tfrecords', shape=(), dtype=string)
list_files
接受3个参数。文件: 字符串,字符串列表或字符串类型(标量或向量)的tf.tensor,表示将要匹配的文件名glob(即shell通配符)模式。随机播放: 默认设置为True,它将随机随机播放文件。seed: ((可选)。一个tf.int64标量tf.Tensor,代表将用于创建分布的随机种子。
返回与文件名相对应的字符串数据集。
希望这能回答您的问题,祝您学习愉快!