2017-12-31 57 views
0

私はtensorflowを使用してLSTMネットを実装しようとしています。tf.nn.static_rnnは、入力と比較して異なるサイズの出力を提供します

iはユニット数= 4

cell = tf.nn.rnn_cell.BasicLSTMCell(4, state_is_tuple=True)

とLSTMcellを有し、私の入力iが4

inputs_series = tf.split(data_hold, 4, axis=1)

に分割2 X 44(data_hold)行列であります

ですから、各ユニットのサイズは2×11でなければなりません。

私の入力シリーズを確認すると、テンソル形状のリスト2 X 11が期待通りです。

[<tf.Tensor 'split:0' shape=(2, 11) dtype=float32>, <tf.Tensor 'split:1' shape=(2, 11) dtype=float32>, <tf.Tensor 'split:2' shape=(2, 11) dtype=float32>, <tf.Tensor 'split:3' shape=(2, 11) dtype=float32>] 

が、私はstate_seriesをチェックするとき、それは形状2 X 4のテンソルの一覧です。

# initial_state is initial_state = tf.nn.rnn_cell.LSTMStateTuple(state_data_hold, hidden_data_hold) 
state_series, current_step = tf.nn.static_rnn(cell=cell, inputs=inputs_series, initial_state=initial_state) 


# state_series 
[<tf.Tensor 'rnn/rnn/basic_lstm_cell/mul_2:0' shape=(2, 4) dtype=float32>, <tf.Tensor 'rnn/rnn/basic_lstm_cell/mul_5:0' shape=(2, 4) dtype=float32>, <tf.Tensor 'rnn/rnn/basic_lstm_cell/mul_8:0' shape=(2, 4) dtype=float32>, <tf.Tensor 'rnn/rnn/basic_lstm_cell/mul_11:0' shape=(2, 4) dtype=float32>] 

私の質問は、状態シリーズと入力シリーズの形状が同じであってはならないということですか?

static_rnn戻りのドキュメントあたりとおり対(出力状態):

出力は出力の長さTリスト(各入力に対して1つ)、またはそのような要素の ネストされたタプル。状態は最終状態です

そして、私がcurrent_stepを印刷すると、現在の単位と隠れた単位のタプルが返されますが、特定の単位はどれですか? (4つの権利がありますか?)

推測どんな?

答えて

1

あなたはそれを期待する理由を私は理解していない状態系列の形状と入力系列が

同じであってはなりません。状態の形状はセルに依存し、入力に依存しません。すべてのRNN様細胞の形状は、そのstate_size属性によって決定され、BasicLSTMCellについては、形状が2つのテンサーのタプル[num_units]である。

+0

おかげで、私はそれを理解してくれました。実際には、ロードされたデータを分割することによって、state_sizeと入力数が混乱しました。私の質問の2番目の部分は、それぞれのバッチのタプルがある、私は11のバッチがltmsnetに供給されていると仮定し、各バッチに隠れユニットと現在のユニットがあるので、合計11のタプル、右?だから私は現在の状態を印刷するとき、それは私に最後のバッチのタプルを与えますか? –

関連する問題