考慮到要是本身去作一個項目,那麼第一步是如何把數據導入到代碼中,何種形式呢?是否須要作預處理?官網中給的實例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.TFRecordReader和
tf.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已知,已有數據。