web-dev-qa-db-ja.com

テンソルフロー-LSTM- 'テンソル'オブジェクトは反復できません

こんにちは私はlstmrnnセルに次の関数を使用しています。

_def LSTM_RNN(_X, _istate, _weights, _biases):
    # Function returns a tensorflow LSTM (RNN) artificial neural network from given parameters. 
    # Note, some code of this notebook is inspired from an slightly different 
    # RNN architecture used on another dataset: 
    # https://tensorhub.com/aymericdamien/tensorflow-rnn

    # (NOTE: This step could be greatly optimised by shaping the dataset once
    # input shape: (batch_size, n_steps, n_input)
    _X = tf.transpose(_X, [1, 0, 2])  # permute n_steps and batch_size

    # Reshape to prepare input to hidden activation
    _X = tf.reshape(_X, [-1, n_input]) # (n_steps*batch_size, n_input)

    # Linear activation
    _X = tf.matmul(_X, _weights['hidden']) + _biases['hidden']

    # Define a lstm cell with tensorflow
    lstm_cell = rnn_cell.BasicLSTMCell(n_hidden, forget_bias=1.0)


    # Split data because rnn cell needs a list of inputs for the RNN inner loop
    _X = tf.split(0, n_steps, _X) # n_steps * (batch_size, n_hidden)

    # Get lstm cell output
    outputs, states = rnn.rnn(lstm_cell, _X, initial_state=_istate)

    # Linear activation
    # Get inner loop last output
    return tf.matmul(outputs[-1], _weights['out']) + _biases['out']
_

関数の出力はpred変数の下に保存されます。

pred = LSTM_RNN(x, istate, weights, biases)

しかし、それは次のエラーを示しています。 (これは、テンソルオブジェクトが反復可能ではないことを示しています。)

これがエラー画像のリンクです- http://imgur.com/a/NhSFK

これを手伝ってください。私はlstmとテンソルフローライブラリにかなり慣れていないので、この質問がばかげているように思われる場合はお詫びします。

ありがとう。

6
Daniel Fox

ステートメント_c, h=state_を使用してstateを解凍しようとしたときにエラーが発生しました。使用しているテンソルフローのバージョンに応じて(r0.11より前のバージョンでは、pythonインタプリタ)に_import tensorflow; tensorflow.__version___と入力してバージョン情報を確認できます)、 rnn_cell.BasicLSTMCell(n_hidden, forget_bias=1.0)を初期化するときの_state_is_Tuple_引数はFalseに設定されます。 ドキュメント を参照してください。

BasicLSTMCell documentation in r0.10

Tensorflowバージョンr0.11(またはマスターバージョン)以降、_state_is_Tuple_のデフォルト設定はTrueに設定されています。 ドキュメント はこちらをご覧ください。

BasicLSTMCell documentation in r0.11

R0.11またはテンソルフローのマスターバージョンをインストールした場合は、BasicLSTMCell初期化行をlstm_cell = rnn_cell.BasicLSTMCell(n_hidden, forget_bias=1.0, state_is_Tuple=False)に変更してみてください。発生しているエラーはなくなるはずです。ただし、彼らのページには、_state_is_Tuple=False_の動作はまもなく非推奨になると書かれています。

BasicLSTMCell state_is_Tuple argument documentation

8
Zhongyu Kuang

たまたま同じ質問に出くわしました。私はあなたのために役立つかもしれない私の状況を説明するだけです

次のように述べています

c1_ex, T1_ex = tf. ones(10,tf. int 32)
 raise Type Error ...

'='の左側にベクトルの2つの名前が事前に設定されていることがわかりました

反対側はベクトルを返すだけです

英語が下手でごめんなさい

問題は実際には193行目ではなく146行目に表示されます

3
user8097598