#python #tensorflow
#python #тензорный поток
Вопрос:
Предположим, я пишу файл TFRecords с примерами MNIST (https://github.com/tensorflow/tensorflow/blob/master/tensorflow/examples/how_tos/reading_data/convert_to_records.py ) Это делается примерно так:
writer = tf.python_io.TFRecordWriter(filename)
for index in range(num_examples):
image_raw = images[index].tostring()
example = tf.train.Example(features=tf.train.Features(feature={
'height': _int64_feature(rows),
'width': _int64_feature(cols),
'depth': _int64_feature(depth),
'label': _int64_feature(int(labels[index])),
'image_raw': _bytes_feature(image_raw)}))
writer.write(example.SerializeToString())
writer.close()
Затем в каком-то другом скрипте я загружаю его. Но единственный способ, который я нашел, — это запустить его как тензор и извлечь данные, в которых r
есть одна запись из итератора record_iter = tf.python_io.tf_record_iterator(db_path)
with tf.Session() as sess_tmp:
single_ex = (sess_tmp.run(tf.parse_single_example(r,features={
'height': tf.FixedLenFeature([], tf.int64),
'width': tf.FixedLenFeature([], tf.int64),
'depth': tf.FixedLenFeature([], tf.int64),
'image_raw': tf.FixedLenFeature([], tf.string),
'label': tf.FixedLenFeature([], tf.int64),
})))
Затем данные могут быть получены с single_ex['height']
помощью, например.
Однако мне кажется, что должен быть более простой способ. Кажется, я не могу найти соответствующий .proto для извлечения данных. И данные определенно есть. вот дамп r
:
?
?
image_raw?
?
?amp;00>a?????????????(??Y??aC?z??;??????e?i???
??)L???^
?y????~??a???4??G??<????.M???n???t????VBљ?<???اZ????????,I?ņ
depth
label
width
height
Ответ №1:
tf.train.Example.ParseFromString()
Может использоваться для преобразования строки в объект protobuf:
r = ... # String object from `tf.python_io.tf_record_iterator()`.
example_proto = tf.train.Example()
example_proto.ParseFromString(r)
Схему для этого буфера протокола можно найти в tensorflow/core/example/example.proto
.
Комментарии:
1. Спасибо, понятия не имею, почему я не смог ее найти.