閱讀 Parse TFRecord 檔案

TFRecord 檔案是用於儲存資料(張量)的本機張量流二進位制格式。要讀取檔案,你可以使用類似於 CSV 示例的程式碼:

import tensorflow as tf
filename_queue = tf.train.string_input_producer(["file.tfrecord"], num_epochs=1)
reader = tf.TFRecordReader()
key, serialized_example = reader.read(filename_queue)

然後,你需要解析 serialized_example Queue 中的示例。你可以使用 tf.parse_example,這需要以前的批處理,但更快tf.parse_single_example

batch = tf.train.batch([serialized_example], batch_size=100)
parsed_batch = tf.parse_example(batch, features={
  "feature_name_1": tf.FixedLenFeature(shape=[1], tf.int64),
  "feature_name_2": tf.FixedLenFeature(shape=[1], tf.float32)
})

tf.train.batch 將形狀 [x, y, z] 的給定張量的連續值連線到形狀 [batch_size, x, y, z] 的張量。features 字典對映到的 tensorflow 的定義的功能名稱的功能 。你以類似的方式使用 parse_single_example

parsed_example = tf.parse_single_example(serialized_example, {
  "feature_name_1": tf.FixedLenFeature(shape=[1], tf.int64),
  "feature_name_2": tf.FixedLenFeature(shape=[1], tf.float32)
})

tf.parse_exampletf.parse_single_example 返回一個字典,將特徵名稱對映到具有值的張量。

要批量來自 parse_single_example 的示例,你應該從字典中提取張量並像以前一樣使用 tf.train.batch

parsed_batch = dict(zip(parsed_example.keys(),
    tf.train.batch(parsed_example.values(), batch_size=100)

你像以前一樣閱讀資料,通過所有張量的列表來評估 sess.run

with tf.Session() as sess:
  sess.run(tf.initialize_local_variables())
  tf.train.start_queue_runners()
  try:
    while True:
      data_batch = sess.run(parsed_batch.values())
      # process data
  except tf.errors.OutOfRangeError:
    pass