TensorFlow中數據讀取—如何載入樣本

  考慮到要是本身去作一個項目,那麼第一步是如何把數據導入到代碼中,何種形式呢?是否須要作預處理?官網中給的實例mnist,數據導入都是寫好的模塊,那麼本身的數據呢?python

  1、從文件中讀取數據(CSV文件、二進制文件、圖片或其餘格式)網絡

  讀取文件,都須要一個閱讀器reader和一個轉換解碼操做decode,不一樣格式的文件對應不一樣的接口API。架構

  1)CSV文件:用的文件讀取器和解碼器是 TextLineReader 和 decode_csv 。 下面代碼來自TensorFlow官網,加了註釋。ui

filename_queue = tf.train.string_input_producer(["file0.csv", "file1.csv"])
#["file0.csv", "file1.csv"]是文件名列表,tf.train.string_input_producer()用來生成文件名隊列,有參數shuffle=True可執行亂序,num_epochs=None可設置文件名字符串的生成次數
#對於輸入管道,輸出文件名字符串到隊列中
reader = tf.TextLineReader()#閱讀器,我的感受功能同Python的open()。
key, value = reader.read(filename_queue)#參數是文件名隊列,返回一個tuple,key和value,每次返回閱讀器的下一條記錄(一行)。

# Default values, in case of empty columns. Also specifies the type of the
# decoded result.
record_defaults = [[1], [1], [1], [1], [1]] #定義解析的格式
col1, col2, col3, col4, col5 = tf.decode_csv(
    value, record_defaults=record_defaults)
#將CSV解析爲tensor,每列映射爲一個tensor,返回一個tensor列表。
features = tf.concat(0, [col1, col2, col3, col4])
#0表明按行合併。參數1是在哪一個維度合併,參數2是待合併的值。
with tf.Session() as sess:
  # Start populating the filename queue.
  coord = tf.train.Coordinator()  #建立一個線程協調器
  threads = tf.train.start_queue_runners(coord=coord)  #啓動Graph中全部隊列的線程

  for i in range(1200):
    # Retrieve a single instance:
    example, label = sess.run([features, col5])
    #運行,獲取樣本和標籤
  coord.request_stop()  #請求中止全部線程
  coord.join(threads)  #等待線程結束

  2)二進制文件:用的文件讀取器和解碼器是  tf.FixedLengthRecordReader 和 tf.decode_raw ,讀取固定長度的文件。spa

  decode_raw操做能夠將一個字符串轉換爲一個uint8的張量。線程

  3)標準TensorFlow格式:code

  能夠將任意的數據轉換爲TensorFlow所支持的格式, 這種方法可使TensorFlow的數據集更容易與網絡應用架構相匹配。方法就是使用TFRecords文件。blog

  寫入數據後,經過修改 tf.train.Example 的Features,將 protocol buffer 序列化爲一個字符串,再經過 tf.python_io.TFRecordWriter 將序列化的字符串寫入 TFRecords文件中。使用tf.TFRecordReadertf.parse_single_example解析器,能夠從TFRecords文件中讀取數據。這個parse_single_example操做能夠將 protocol buffer 解析爲張量。接口

  

  2、供給數據feed_dict參數隊列

  定義了operation以後,使用sess.run()或tensor.eval()或op.run()時,經過參數feed_dict傳遞數據,該參數是和placeholder配套使用的。先聲明一個佔位符,好比x,y。而後在op中使用了x,y進行計算,等到op.run()時,op.run(feed_dict={x:x_batch,y:y_batch})便可。前提是x_batch和y_batch已知,已有數據。

相關文章
相關標籤/搜索