我正在创建tfrecords文件并从tfrecords读取数据。 tfrecords具有两个功能,caridid和length。

创建tfrecords:

writer = tf.python_io.TFRecordWriter(filename + '_Squence.tfrecords')
example = tf.train.Example(features=tf.train.Features(
    feature={
        'vehicleid': tf.train.Feature(int64_list=tf.train.Int64List(value=[vehicleid])),
        'length': tf.train.Feature(int64_list=tf.train.Int64List(value=[length]))

    }))
writer.write(example.SerializeToString())
writer.close()


读取tfrecords:

filepath = filename + "_Squence.tfrecords"
filename_queue = tf.train.string_input_producer([filepath])
reader = tf.TFRecordReader()
_, serialized_example = reader.read(filename_queue)   # return filename and file
features = tf.parse_single_example(serialized_example, features={
    'vehicleid': tf.FixedLenFeature([], tf.int64),
    'length': tf.FixedLenFeature([], tf.int64)
    })

vehicleid = tf.cast(features["vehicleid"], tf.int64)
length = tf.cast(features["length"], tf.int64)
return vehicleid, length


但是,当我调试代码时,我将丢失一些数据。
例如,如果我发送这两个例子

[vehicleid = a,frameid = b],
[vehicleid = c,frameid = d]

到tfrecords文件中,当我读取数据时,我将获得这样的数据

[车辆ID = a,frameid = d]。

我丢失了一些数据。

有人可以帮我解决这个问题吗?非常感谢你。

最佳答案

tf.train.string_input_producer([filepath])返回一个队列。每次使用reader.read(filename_queue)进行访问时,它都会返回队列的最后一个第一元素。如果第二次执行reader.read,它将返回第二个元素。

如果要达到一批元素,可以将tf.train.batch与queue的输出一起用作tf.train.batch.的输入

07-27 20:05