テンソルフローで2つのLSTM状態を連結しようとしています。これまではtf.concat
で処理されていましたが、これは結果として得られる状態でログを計算する必要があり、'Tensor' object is not iterable
から結果の状態を繰り返し処理することができないため動作しません。ここでTensorflowで2つのRNN状態を連結する
は私がしようとしているものです:
outputs, fstate = tf.nn.dynamic_rnn(cell=lstm, inputs=rnn_inputs,
sequence_length=lengths,
dtype=tf.float32, time_major=False)
outputs2, fstate2 = tf.nn.dynamic_rnn(cell=lstm2, inputs=rnn_inputs2,
sequence_length=lengths2,
dtype=tf.float32, time_major=False)
newRnnState = tf.concat([fstate, fstate2], 1)
logits = tf.matmul(tf.concat([f.h for f in newRnnState], 1), output_layer[0]) + output_bias[0]
これはエラーを返します:TypeError: 'Tensor' object is not iterable.
は、私は2つのRNN一緒に述べているとのようにそれらを使用するを連結できるように、これを実行する方法はありますこの?
おかげ
newRnStateはテンソルであり配列ではないため、このエラーが発生します。あなたがしたいことに応じて、これを試すことができます: logits = tf.matmul(tf.concat([fstate.h、fstate2.h]、1)、output_layer [0])+ output_bias [0] –
@AnthonyD 'アマートこれは、fstateがLSTMStateTupleなので動作しません。しかし、もし私が代わりに 'logits [0] = tf.matmul(tf.concat([fstate [0] .h、fstate2 [0] .h]、1)、output_layer [0])+ output_bias [0] '、それは連結で成功しますが、後で出力形状が正しくないと不平を言う。それぞれのLSTMセルのサイズが256であるので、 '(9、256)'でなければなりません。 'output_layer [0]'との乗算はできません。 '(256、出力)'のサイズです。正しい解決策は 'output_layer'サイズを変更することではないと思いますか? – hockeybro
ハァーよ、申し訳ありません私はそれがタプルだったことを忘れました、あなたは正しいです。しかし、各LSTMは256のセルサイズを持っているので、軸1に沿って両方の出力を連結すると512になります。output_layerのサイズを(cell_size * 2、output) –