【问题标题】:Tensorflow - Edit a TFRecordTensorflow - 编辑 TFRecord
【发布时间】:2019-11-14 12:42:31
【问题描述】:

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

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

【问题讨论】:

    标签: tensorflow tensorflow-datasets tensorflow2.0 tfrecord


    【解决方案1】:

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

    对于 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)
    

    【讨论】:

    • 谢谢!为什么要在 TF 2.0 版本中使用r.numpy()?不应该是rec.numpy()吗?另外,关于使用现有 TFRecord 的内容创建新的 TFRecord,解析旧内容是否需要相同的时间?如果是,那帮助不大。我可以从头开始创建它,有趣的是,将 TFRecord 中的内容写入新的内容会更快
    • @IlanAizelman 是的,应该是rec,抱歉,感谢您指出这一点。关于速度,它的工作速度要快一些,因为它并没有真正解析记录,但我不知道它是否会产生很大的不同,这取决于......
    • 我明白了,我也这么认为。我会尽快检查这种方法。再次感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多