時間序列展開表示:python
公式表示:3d
這裏的[S1t→;S2t→]作的是一個拼接,若是他們都是1000維的,拼接在一塊兒就是2000維的了。 雙向RNN須要的內存是單向RNN的兩倍,由於在同一時間點,雙向RNN須要保存兩個方向上的權重參數,在分類的時候,須要同時輸入兩個隱藏層輸出的信息。code
舉例表示:blog
程序表示:內存
n是很是類似的. 定義前向和反向rnn_cell 定義前向和反向rnn_cell的初始狀態 準備好序列 調用bidirectional_dynamic_rnn import tensorflow as tf from tensorflow.contrib import rnn cell_fw = rnn.LSTMCell(10) cell_bw = rnn.LSTMCell(10) initial_state_fw = cell_fw.zero_state(batch_size) initial_state_bw = cell_bw.zero_state(batch_size) seq = ... seq_length = ... (outputs, states)=tf.nn.bidirectional_dynamic_rnn(cell_fw, cell_bw, seq, seq_length, initial_state_fw,initial_state_bw) out = tf.concat(outputs, 2)
時間序列展開表示:
get
公式表示:input
結構表示:it
程序表示:io
def get_mul_cell(hidden_dim, num_layers): # 建立多層lstm def get_en_cell(hidden_dim): # 建立單個lstm enc_base_cell = tf.nn.rnn_cell.BasicLSTMCell(hidden_dim, forget_bias=1.0) return enc_base_cell return tf.nn.rnn_cell.MultiRNNCell([get_en_cell(hidden_dim) for _ in range(num_layers)]) with tf.variable_scope("encoder"): # 構建雙向lstm encode_cell_fw = get_mul_cell(self.config.hidden_dim, self.config.num_layers) encode_cell_bw = get_mul_cell(self.config.hidden_dim, self.config.num_layers) bi_encoder_output, bi_encoder_state = tf.nn.bidirectional_dynamic_rnn( cell_fw=encode_cell_fw, cell_bw=encode_cell_bw, inputs=embed_en_seqs, sequence_length=self.en_length, dtype=tf.float32, time_major=False)