Tensorflow - 编辑 TFRecord

Tensorflow - Edit a TFRecord

问题:有没有办法附加现有的 TFRecord?

注意:.TFRecord 是由我自己的脚本创建的(不是我在网上找到的.tfrecord),所以我可以完全控制它的内容。

无法像这样追加到现有的记录文件,或者至少不能通过 TensorFlow 提供的功能追加。记录文件在创建时由 PyRecordWriter, which calls the function NewWriteableFile 在 C++ 级别编写,删除具有给定名称的任何现有文件以创建一个新文件。但是,可以创建一个新的记录文件,其中包含另一个文件的内容,然后是新记录。

对于 TensorFlow 1.x,您可以这样做:

import tensorflow as tf

def append_records_v1(in_file, new_records, out_file):
    with tf.io.TFRecordWriter(out_file) as writer:
        with tf.Graph().as_default(), tf.Session():
            ds = tf.data.TFRecordDataset([in_file])
            rec = ds.make_one_shot_iterator().get_next()
            while True:
                try:
                    writer.write(rec.eval())
                except tf.errors.OutOfRangeError: break
        for new_rec in new_records:
            writer.write(new_rec)

在 TensorFlow 2.x(急切执行)中,您可以这样做:

import tensorflow as tf

def append_records_v2(in_file, new_records, out_file):
    with tf.io.TFRecordWriter(out_file) as writer:
        ds = tf.data.TFRecordDataset([in_file])
        for rec in ds:
            writer.write(rec.numpy())
        for new_rec in new_records:
            writer.write(new_rec)