關於tf.train.batch和tf.train.string_input_producer的區別(輸入流程簡介)
阿新 • • 發佈:2018-11-10
前面其實對輸入tensorflow資料集的構造和輸入那一塊的認知比較模糊,所以抽了點時間解析了一下官方程式碼。
大概順序如下:
1.輸入所需圖片的地址,然後放到tf.train.string_input_producer中進行管理,注意tf.train.string_input_producer中
只是圖片的地址,不是圖片的值。
2.然後用各種讀取器讀取地址中的資料(圖片,標籤),用的是
reader=tf.FixedLengthRecordReader(record_bytes=record_bytes),這是按位元組來讀的
還有
reader = tf.WholeFileReader()這是直接讀完的
前者適用於一個檔案中有很多組資料的,後者適用於一個檔案一個數據組的
然後就是統一的流程:
result.key, value = reader.read(filename_queue)
從這裡讀出來的value其實資料形態是string型別的,因為trfrecord就是這麼轉換儲存的,所以還要把讀出來的資料進行一些處理(比如把label和image分開,然後轉換成各自所需的資料型別)
record_bytes = tf.decode_raw(value, tf.uint8)
3.為了增強影象的穩健性,可以對影象進行一系列的操作,比如旋轉,亮度,對比度,區域裁剪等操作。對了,一定要注意標準化,不然準確率上不去!!!!!
4.此時的影象都是tensor值得形式了,然後就是放入tf.train.batch或者tf.train.shuffle_batch(打亂)中進行管理,以便資料提取。也就是在這裡才引入執行緒的
images, label_batch = tf.train.batch(
[image, label],
batch_size=batch_size,
num_threads=num_preprocess_threads,#執行緒數
capacity=min_queue_examples + 3 * batch_size)