2015-11-13 10 views
13

ほとんどの場合、このチュートリアルのコピーペーストがウェブサイトにあります。私はエラーを取得しています:私のcsvファイルのTensorFlowのcsvリーダーには何が欠けていますか?

Invalid argument: ConcatOp : Expected concatenating dimensions in the range [0, 0), but got 0 [[Node: concat = Concat[N=4, T=DT_INT32, _device="/job:localhost/replica:0/task:0/cpu:0"](concat/concat_dim, DecodeCSV, DecodeCSV:1, DecodeCSV:2, DecodeCSV:3)]]

内容は次のとおりです。

3,4,1,8,4

import tensorflow as tf 


filename_queue = tf.train.string_input_producer(["test2.csv"]) 

reader = tf.TextLineReader() 
key, value = reader.read(filename_queue) 

# 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) 
# print tf.shape(col1) 

features = tf.concat(0, [col1, col2, col3, col4]) 
with tf.Session() as sess: 
    # Start populating the filename queue. 
    coord = tf.train.Coordinator() 
    threads = tf.train.start_queue_runners(coord=coord) 

    for i in range(1200): 
    # Retrieve a single instance: 
    example, label = sess.run([features, col5]) 

    coord.request_stop() 
    coord.join(threads) 
+0

サンプルコードは(http://tensorflow.org/how_tos/reading_data/index.md)このエラー –

答えて

13

この問題は、プログラムのテンソルの形が原因で発生します。 TL; DR代わりのtf.concat()あなたは上のget_shape()メソッドを使用することができることに注意してください、私たちは始める前に長さ4

の1-Dテンソルに4つのスカラーcolテンソルを変革なる、tf.pack()を使用する必要があります任意のTensorオブジェクトは、そのテンソルに関する静的形状情報を取得します。例えば、あなたのコード内でコメントアウトされた行は次のようになります。

print col1.get_shape() 
# ==> 'TensorShape([])' - i.e. `col1` is a scalar. 

reader.read()によって返さvalueテンソルは、スカラ文字列です。 tf.decode_csv(value, record_defaults=[...])は、record_defaultsの各要素に対して、valueと同じ形状のテンソル、すなわちこの場合はスカラーを生成する。スカラーは、単一の要素を持つ0次元のテンソルです。 tf.concat(i, xs)はスカラーでは定義されていません.N次元のテンソル(xs)のリストを次元iに沿って新しいN次元のテンソルに連結します。ここで0 <= i < N、有効なiN = 0です。

tf.pack(xs)オペレータは、この問題を簡単に解決するように設計されています。 kのN次元テンソル(同じ形状を持つ)のリストを取り、それらを0次元のサイズkのN + 1次元テンソルにパックします。あなたはtf.concat()tf.pack()と交換した場合は、あなたのプログラムは動作します:

# features = tf.concat(0, [col1, col2, col3, col4]) 
features = tf.pack([col1, col2, col3, col4]) 

with tf.Session() as sess: 
    # Start populating the filename queue. 
    # ... 
+0

CSVセクションが含まれていることを残念です明確化と拡大が必要です。テンソルフローフレームワークを使用して私の特定の問題のために設計したニューラルネットワークを符号化するのに十分なことを学ぶのに約15分かかりました。非常にシンプルなcsvデータの読み方を理解するまでには半日かかりました。 – demongolem

+0

フィードバックいただきありがとうございます!明確にしたい特定の事柄がある場合は、GitHubの問題を提起してください:https://github.com/tensorflow/tensorflow/issues – mrry

1

私もこのtutorialで立ち往生しています。私はあなたのwith tf.Session()を変更したとき、私は、別のために一つの問題を交換することができました:

sess = tf.Session() 
coord = tf.train.Coordinator() 
threads = tf.train.start_queue_runners(coord=coord) 

for i in range(2): 
    #print i 
    example, label = sess.run([features, col5]) 

coord.request_stop() 
coord.join(threads) 

sess.close() 

エラーが消え、TFは、実行するために始めたが、それがスタックしているように見えます。 # printのコメントを外すと、1回の反復しか実行されません。おそらくこれは本当に役に立ちません(私は無限の実行のためにエラーをトレードするので)。

関連する問題