gpt4 book ai didi

python - 如何创建多个 TFRecord 文件而不是制作一个大文件然后将其拆分?

转载 作者:行者123 更新时间:2023-12-04 04:17:46 27 4
gpt4 key购买 nike

我正在处理相当大的时间序列数据集,然后将准备为 SequenceExample 的数据写入 TFRecord 。这会产生一个相当大的文件(超过 100GB),但我想将它存储在块中。我试过了:

file = '/path/to/tf_record_0.tfrecords'
file_index = 0

for record in dataset:
# fill the time series window, prepare the sequence_example, etc.

if os.path.exists(file) and os.path.getsize(file) > 123456789:
file = file.replace(str(file_index), str(file_index + 1))
file_index += 1

with tf.io.TFRecordWriter(file) as writer:
writer.write(sequence_example.SerializeToString())

...但是由于 TFRecordWriter 打开像 Python 的 open(file, mode='w') 这样的文件,它每次进入 with 块时都会覆盖自己(除了它是非常丑陋的解决方案),并且从我读到的内容来看,没有办法改变这种行为。
file 块中更改 with 的路径显然会引发错误。

所以我的问题是,当循环和使用我的数据集时电流达到特定大小时,有没有办法创建下一个 TFRecord 文件?除了系统内存不足之外,当我没有处理任何类型的瓶颈时,无论如何使用较小的 TFRecord 文件是否有好处?如果我是对的,Tensorflow 可以毫无问题地从磁盘读取它(尽管可能还有其他原因,人们更喜欢拥有多个文件)。

我能想到的一件事是在 list 中为准备保存的序列创建某种缓冲区,并在该缓冲区达到某个阈值后创建/保存到 TFRecord

最佳答案

我正在使用数据生成器来创建我的 TF 记录,在我的情况下,我遵循的几乎与上一个答案所建议的相同,这是我的代码:

tfrecord_filename = 'test_record_{}.tfrecords'
file_index_count = 0

base_path = 'image_path'

for index in range(2): # Number of splits
writer = tf.data.experimental.TFRecordWriter(tfrecord_filename.format(index))

serialized_features_dataset = tf.data.Dataset.from_generator(
generator, output_types=tf.string, output_shapes=())

writer.write(serialized_features_dataset)
我在生成器中添加了以下代码:
def generator():
for folder in os.listdir(base_path):
images = glob.glob(base_path+folder+ '/*.jpg')

partition_factor = len(images) // 2 # split number
partition_images = images[int(partition_factor*index):int(partition_factor*(index+1))]

for image in partition_images:
yield serialize_images(image, folder) # this method is where I parse the images into records

关于python - 如何创建多个 TFRecord 文件而不是制作一个大文件然后将其拆分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60215159/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com