随机播放TFRecordDataset文件,但文件内部没有样本

问题描述 投票:1回答:1

我已生成数据并将其保存到多个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

在非法示例中,一个文件的样本不再一起出现或顺序出现。

tensorflow tensorflow-datasets tfrecord
1个回答
0
投票

您可以如下使用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,代表将用于创建分布的随机种子。

返回与文件名相对应的字符串数据集。

希望这能回答您的问题,祝您学习愉快!

© www.soinside.com 2019 - 2024. All rights reserved.