1. 程式人生 > >關於tf.train.batch和tf.train.string_input_producer的區別(輸入流程簡介)

關於tf.train.batch和tf.train.string_input_producer的區別(輸入流程簡介)

前面其實對輸入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)