2017-05-08 66 views
0

我想使用張量流將序列寫入序列。 我輸入的數據形狀tensorflow,具有可變數據長度的decode_csv

[input_length, target_length, input , target] 

和他們都不同的長度。 如何使用tf.decode_csv? 我試圖使record_defaults的最大輸入長度。 但所有的形狀必須完全定義在record_defaults ............ 我不明白這一點。

csv_file = tf.train.string_input_producer([file_name], name='file_name') 
    reader = tf.TextLineReader() 
    _, line = reader.read(csv_file) 
    record_defaults = [[0] for row in range(20)] 
    data = tf.decode_csv(line,record_defaults=record_defaults,field_delim=',') 
    len_error = tf.slice(data,[0],[1]) 
    len_target = tf.slice(data, [1], [1]) 
    error = tf.slice(data,[2],len_error) 
    target = tf.slice(data, 2+len_error , len_target) 
+0

我也試過這個,不能使它使用這種方法。似乎確實,你的行必須都等於最大值,以使其工作。如果你爲Max定義了默認值,但是有一行的觀測值較少,那麼它可能會拋出一個錯誤,說'預期的X觀測值,但得到了Y'。也許像CSV文件中額外的','來模擬空白是值得一試?還沒有嘗試過自己。我經常發現閱讀TF以外的文本文件比較容易,比如使用numpy/pandas,然後將值傳給TF,但這樣你會失去很好的TF洗牌和多文件問題 –

+0

哇......你真好。我必須嘗試另一種文件類型。非常非常感謝你 – Amily

回答

1

是的,tf.decode_csv確實要求所有行的大小相同。如果這不適合您,請考慮在Github上提交功能請求。

您也可以預處理您的CSV文件,將所有條目填充到相同數量的列;您可以使用tf.decode_csvrecord_defaults參數將字段留空,但提供默認值。