2016-02-26 87 views
10

我試圖讀取CSV文件的數據tensorflow,如何將數據讀入Tensorflow?

https://www.tensorflow.org/versions/r0.7/how_tos/reading_data/index.html#filenames-shuffling-and-epoch-limits

正式文件中的代碼示例是這樣的:

col1, col2, col3, col4, col5 = tf.decode_csv(value, record_defaults=record_defaults) 

讀取該文件,我需要知道預先在文件中有多少列和行,如果有1000列,我需要定義1000個變量,如col1, col2, col3, col4, col5,..., col1000 ,,這看起來不像是一種有效的讀取數據的方式。

我的問題

  1. 什麼是讀取CSV文件導入Tensorflow的最佳方式?

  2. 是否有任何方式來讀取Tensorflow中的數據庫(如mongoDB)?

回答

5
  1. 你絕對不需要定義COL1,COL2,以col1000 ...

    通常,你可以做這樣的事情:

    
    columns = tf.decode_csv(value, record_defaults=record_defaults) 
    features = tf.pack(columns) 
    do_whatever_you_want_to_play_with_features(features) 
    
  2. 我不知道任何現成的方式來直接從MongoDB讀取數據。也許你可以寫一個簡短的腳本來以Tensorflow支持的格式轉換來自MongoDB的數據,我會推薦二進制形式TFRecord,它比csv記錄要快得多。 This是一個很好的博客文章關於這個話題。或者您可以選擇自行實施自定義數據閱讀器,請參閱the official doc

2
def func() 
    return 1,2,3,4 

b = func() 

print b #(1, 2, 3, 4) 

print [num for num in b] # [1, 2, 3, 4] 

嗨它無關tensorflow其簡單的python不需要定義變量1000。 tf.decode_csv返回一個元組。

不知道數據庫處理,我想你可以使用python,只需將數據以陣列形式輸入到tensorflow。

希望這是有益

1

當然你可以實現從mongo直接讀取批量隨機排序訓練的數據,以饋送到tensorflow。下面是我的方式:

 for step in range(self.steps): 


      pageNum=1; 
      while(True): 
       trainArray,trainLabelsArray = loadBatchTrainDataFromMongo(****) 
       if len(trainArray)==0: 
        logging.info("train datas consume up!") 
        break; 
       logging.info("started to train") 
       sess.run([model.train_op], 
         feed_dict={self.input: trainArray, 
            self.output: np.asarray(trainLabelsArray), 
            self.keep_prob: params['dropout_rate']}) 

       pageNum=pageNum+1; 

,你也需要預處理的培訓MongoDB中的數據,例如像:爲每一個訓練有素的數據在MongoDB中隨機排序值...