2016-10-31 9 views
1

これらの投稿は文字通り何千もありますが、私の正確な問題に対処するものはまだありません。ある場合は、これを閉じてください。sess.runのTensorflow unhashableタイプ 'list'

私はリストがPythonで変更可能であることを理解しています。その結果、リストをキーとして辞書に格納することはできません。

Iは、次のコード(それは無関係であるので、それのトンが省略されている)を有する:

with tf.Session() as sess: 
    sess.run(init) 
    step = 1 

    while step * batch_size < training_iterations: 
      for batch_x, batch_y in batch(train_x, train_y, batch_size): 

      batch_x = np.reshape(batch_x, (batch_x.shape[0], 
              1, 
              batch_x.shape[1])) 
      batch_x.astype(np.float32) 

      batch_y = np.reshape(batch_y, (batch_y.shape[0], 1)) 
      batch_y.astype(np.float32) 

      sess.run(optimizer, feed_dict={x: batch_x, y: batch_y}) 
      if step % display_step == 0: 
       # Calculate batch accuracy 
       acc = sess.run(accuracy, 
           feed_dict={x: batch_x, y: batch_y}) 
       # Calculate batch loss 
       loss = sess.run(cost, feed_dict={x: batch_x, y: batch_y}) 
       print("Iter " + str(step*batch_size) + 
         ", Minibatch Loss= " + 
         "{:.6f}".format(loss) + ", Training Accuracy= " + 
         "{:.5f}".format(acc)) 
     step += 1 
    print("Optimization Finished!") 

train_x

train_y[batch_size, num_features] numpyの行列であること

[batch_size, num_results] numpyの行列でありますグラフには次のプレースホルダがあります。

x = tf.placeholder(tf.float32, shape=(None, num_steps, num_input)) 
y = tf.placeholder(tf.float32, shape=(None, num_res)) 

自然に私はtrain_xtrain_yを適切な形式のテンソルフローが得られるように変換する必要があります。

batch_x = np.reshape(batch_x, (batch_x.shape[0], 
           1, 
           batch_x.shape[1])) 

batch_y = np.reshape(batch_y, (batch_y.shape[0], 1)) 

この結果は私に2 numpy.ndarrayを与える:私は次のようにそれを行う

当社グラフによって期待されるように

batch_xは寸法[batch_size, timesteps, features] batch_yのですが寸法[batch_size, num_results]

です。私はこれらの整形numpy.ndarrayを渡すとき

は今、私は次の行にTypeError: Unhashable type listを取得します:pythonを発射するので

sess.run(optimizer, feed_dict={x: batch_x, y: batch_y}) 

これは私には奇妙に思える:

import numpy as np 
a = np.zeros((10,3,4)) 
{a : 'test'} 
TypeError: unhashable type: 'numpy.ndarray` 

あなたは、私が完全に見ることができます別のエラーメッセージ。

はまた、私のコードで私はデータに一連の変換を実行します。

x = tf.transpose(x, [1, 0, 2]) 
x = tf.reshape(x, [-1, num_input]) 
x = tf.split(0, num_steps, x) 


lstm_cell = rnn_cell.BasicLSTMCell(num_hidden, forget_bias=forget_bias) 
outputs, states = rnn.rnn(lstm_cell, x, dtype=tf.float32) 

そして、リストが発生した唯一の場所は、テンソルrnn.rnnを期待のTサイズのリストで、その結果、スライスした後です。

私はここで完全に紛失しています。私は解決策を見つめているように感じ、私はそれを見ることができません。誰でもここで私を助けることができますか?

ありがとうございました!

答えて

3

私はここでばかげていると感じますが、他の誰かがこの問題を抱えていると確信しています。

tf.splitの結果が上の行は問題です。

私はこれらを別々の関数に分割せず、xを(自分のコードに示すように)直接変更して名前を変更しませんでした。したがって、コードがsess.runで実行されたとき、xはもはやテンソルプレースホルダーではなく、グラフの変形後のテンソルのリストになりました。

xの各変換の名前を変更すると問題が解決しました。

私はこれが誰かを助けてくれることを願っています。

0

xyの中のfeed_dict={x: batch_x, y: batch_y}が何らかの理由である場合にも、このエラーが発生します。私の場合、私はXYと間違っていました。これらは私のコードのリストでした。

+0

これは質問に対する答えを提供しません。十分な[評判](https://stackoverflow.com/help/whats-reputation)があれば、[投稿にコメントする]ことができます(https://stackoverflow.com/help/privileges/comment)。代わりに、[質問者からの明確化を必要としない回答を提供する](https://meta.stackexchange.com/questions/214173/why-do-i-need-50-reputation-to-comment-what-c​​an- i-do-代わりに)。 - [レビューの投稿](/レビュー/低品質の投稿/ 18274849) – yivi

関連する問題