我正致力于创建tfrecords文件并从tfrecords中读取数据。 tfrecords有两个特征,车辆和长度。
创建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文件,当我读取数据时,我会得到这样的数据
[vehicleid = a,frameid = d]。
我丢失了一些数据。
请有人帮我解决这个问题吗?非常感谢你。
答案 0 :(得分:1)
tf.train.string_input_producer([filepath])
返回一个队列。每次加入reader.read(filename_queue)
时,它都会返回队列的最后一个元素。如果您第二次执行reader.read
,它将返回第二个元素。
如果您想要访问一批元素,可以使用tf.train.batch
将队列输出作为tf.train.batch.
的输入