13

これは主に、Web サイトのチュートリアルからのコピー ペーストです。エラーが発生します:

無効な引数: ConcatOp : 範囲 [0, 0) の連結次元が期待されていましたが、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)]]

私のcsvファイルの内容は次のとおりです。

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)
4

2 に答える 2

13

この問題は、プログラム内のテンソルの形状が原因で発生します。TL;DR代わりにtf.concat()を使用する必要がありますtf.pack()。これは、4 つのスカラーcolテンソルを長さ 4 の 1-D テンソルに変換します。

get_shape()開始する前に、このメソッドを任意のTensorオブジェクトで使用して、そのテンソルに関する静的形状情報を取得できることに注意してください。たとえば、コード内のコメントアウトされた行は次のようになります。

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

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

オペレーターは、tf.pack(xs)この問題を簡単に解決できるように設計されています。kN 次元テンソル (同じ形状)のリストを取り、それらをk0 次元のサイズの 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.
  # ...
于 2015-11-13T05:59:09.947 に答える
1

私もこのチュートリアルにこだわっています。次のように変更したとき、ある問題を別の問題と交換することができました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 回だけ実行されることがわかります。ほとんどの場合、これはあまり役に立ちません (エラーを無限実行と交換するため)。

于 2015-11-13T05:44:46.413 に答える