Я имею дело с довольно большим набором данных временного ряда, который подготовлен как SequenceExample
s, затем записывается в TFRecord
. В результате получается довольно большой файл (более 100 ГБ), но я бы хотел, чтобы он хранился кусками. Я пробовал:
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
, как только этот буфер достигнет некоторого порога.