双向RNN理解笔记

单层

时间序列展开表示

image.png

公式表示

image.png

这里的[S1t→;S2t→]做的是一个拼接,如果他们都是1000维的,拼接在一起就是2000维的了。 双向RNN需要的内存是单向RNN的两倍,因为在同一时间点,双向RNN需要保存两个方向上的权重参数,在分类的时候,需要同时输入两个隐藏层输出的信息。

举例表示

image.png

image.png

程序表示

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)

多层

时间序列展开表示image.pngimage.png

公式表示

image.png

结构表示

image.png

程序表示

        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)

转载于:https://my.oschina.net/u/3851199/blog/1941717

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值