tensorflow提供了一種統一的格式來儲存資料,這個格式就是tfrecord,接下來介紹如何使用tfrecord來統一輸入資料的格式。
tfrcord檔案中的資料都是通過tf.train.example protocol buffer的格式來儲存的,以下**給出了tf.train.example的定義。
message example
message feature
message feature
};
從以上**可以看出tf.train.example的資料結構是比較簡潔的。tf.train.example中包含了乙個從屬性名稱到取值的字典。其中屬性名稱是乙個字串,屬性數值可以為字串(byteslist),實數列表(floatlist)或者整數列表(int64list)。
#coding;utf-8
import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data
import numpy as np
def _int64_feature(value):
return tf.train.feature(int64_list=tf.train.int64list(value=[value]))
def _bytes_feature(value):
return tf.train.feature(bytes_list=tf.train.byteslist(value=[value]))
mnist = input_data.read_data_sets('mnist/',dtype=tf.uint8,one_hot=true)
images = mnist.train.images
labels = mnist.train.labels
pixels = images.shape[1]
num_examples = mnist.train.num_examples
filename = 'output/train.tfrecords'
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=))
writer.write(example.serializetostring())
writer.close()
以上程式可以將mnist資料集中所有的訓練資料儲存到乙個tfrcord檔案中,當資料量較大時,也可以將資料寫入多個tfrcord檔案。
#coding;utf-8
import tensorflow as tf
import matplotlib as plt
import cv2
reader = tf.tfrecordreader()
#建立乙個佇列來維護輸入的檔案列表
filename_queue = tf.train.string_input_producer(['output/train.tfrecords'])
_,serialized_example = reader.read(filename_queue)
features = tf.parse_single_example(serialized_example,
features=)
images = tf.decode_raw(features['image_raw'],tf.uint8)
labels = tf.cast(features['label'],tf.int32)
pixels = tf.cast(features['pixels'],tf.int32)
sess = tf.session()
coord = tf.train.coordinator()
threads = tf.train.start_queue_runners(sess=sess,coord=coord)
for i in range(10):
image,label,pixel = sess.run([images,labels,pixels])
cv2.imshow('image',image)
以上程式可以將之前生成的train.tfrecords檔案轉換為可讀。 TensorFlow高效讀取資料的方法
tfrecords其實是一種二進位制檔案,用來儲存 tf.train.example協議記憶體塊 protocol buffer 乙個example中包含features,features裡包含乙個名字為feature的字典,裡面是 key value 對,value是 乙個floatlis byt...
TensorFlow高效讀取資料的方法
tensorflow高效讀取資料的方法 關於tensorflow讀取資料,官網給出了三種方法 供給資料 feeding 在tensorflow程式執行的每一步,讓python 來供給資料。從檔案讀取資料 在tensorflow圖的起始,讓乙個輸入管線從檔案中讀取資料。預載入資料 在tensorflo...
Tensorflow高效讀取資料的方法
最新上傳的mcnn中有完整的資料讀寫示例,可以參考。關於tensorflow讀取資料,官網給出了三種方法 對於資料量較小而言,可能一般選擇直接將資料載入進記憶體,然後再分batch輸入網路進行訓練 tip 使用這種方法時,結合yield使用更為簡潔,大家自己嘗試一下吧,我就不贅述了 但是,如果資料量...