【发布时间】:2019-11-14 12:42:31
【问题描述】:
问题:有没有办法附加现有的 TFRecord?
注意: .TFRecord 是由我自己的脚本创建的(不是我在网上找到的 .tfrecord),所以我可以完全控制它的内容。
【问题讨论】:
标签: tensorflow tensorflow-datasets tensorflow2.0 tfrecord
问题:有没有办法附加现有的 TFRecord?
注意: .TFRecord 是由我自己的脚本创建的(不是我在网上找到的 .tfrecord),所以我可以完全控制它的内容。
【问题讨论】:
标签: tensorflow tensorflow-datasets tensorflow2.0 tfrecord
不可能这样附加到现有记录文件,或者至少不能通过 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)
【讨论】:
r.numpy()?不应该是rec.numpy()吗?另外,关于使用现有 TFRecord 的内容创建新的 TFRecord,解析旧内容是否需要相同的时间?如果是,那帮助不大。我可以从头开始创建它,有趣的是,将 TFRecord 中的内容写入新的内容会更快
rec,抱歉,感谢您指出这一点。关于速度,它的工作速度要快一些,因为它并没有真正解析记录,但我不知道它是否会产生很大的不同,这取决于......