2017-09-13 15 views
4

Tensorflowで多層の双方向LSTMを使用する方法を知りたい。Tensorflowで多層双方向LSTMを使用するには?

私はすでに双方向LSTMのコンテンツを実装しましたが、このモデルとモデル追加のマルチレイヤーを比較したいと思います。

この部分にコードを追加するにはどうすればよいですか?次bilstmへの入力として前bilstm層のうち使用)

1:あなたが多層bilstmモデルを適用するために、2つの異なるアプローチを使用することができ

x = tf.unstack(tf.transpose(x, perm=[1, 0, 2])) 
#print(x[0].get_shape()) 

# Define lstm cells with tensorflow 
# Forward direction cell 
lstm_fw_cell = rnn.BasicLSTMCell(n_hidden, forget_bias=1.0) 
# Backward direction cell 
lstm_bw_cell = rnn.BasicLSTMCell(n_hidden, forget_bias=1.0) 

# Get lstm cell output 
try: 
    outputs, _, _ = rnn.static_bidirectional_rnn(lstm_fw_cell, lstm_bw_cell, x, 
              dtype=tf.float32) 
except Exception: # Old TensorFlow version only returns outputs not states 
    outputs = rnn.static_bidirectional_rnn(lstm_fw_cell, lstm_bw_cell, x, 
            dtype=tf.float32) 

# Linear activation, using rnn inner loop last output 
outputs = tf.stack(outputs, axis=1) 
outputs = tf.reshape(outputs, (batch_size*n_steps, n_hidden*2)) 
outputs = tf.matmul(outputs, weights['out']) + biases['out'] 
outputs = tf.reshape(outputs, (batch_size, n_steps, n_classes)) 

答えて

2

。最初に、長さがnum_layersの順方向および逆方向のセルで配列を作成する必要があります。そして

for n in range(num_layers): 
     cell_fw = cell_forw[n] 
     cell_bw = cell_back[n] 

     state_fw = cell_fw.zero_state(batch_size, tf.float32) 
     state_bw = cell_bw.zero_state(batch_size, tf.float32) 

     (output_fw, output_bw), last_state = tf.nn.bidirectional_dynamic_rnn(cell_fw, cell_bw, output, 
                      initial_state_fw=state_fw, 
                      initial_state_bw=state_bw, 
                      scope='BLSTM_'+ str(n), 
                      dtype=tf.float32) 

     output = tf.concat([output_fw, output_bw], axis=2) 

2)また別のアプローチstacked bilstmで一見の価値。

+1

私はこれを試してこのエラーが発生しました:ValueError:変数bidirectional_rnn/fw/lstm_cell/kernelが既に存在し、許可されていません。 VarScopeでreuse = Trueを設定することを意味しましたか?あなたは実例を提供できますか? – Rahul

関連する問題