双向RNN

普通的RNN只能依据之前时刻的时序信息来预测下一时刻的输出,但在有些问题中,当前时刻的输出不仅和之前的状态有关,还可能和未来的状态有关系。

比如预测一句话中缺失的单词不仅需要根据前文来判断,还需要考虑它后面的内容,真正做到基于上下文判断。

BRNN有两个RNN上下叠加在一起组成的,输出由这两个RNN的状态共同决定。

从前往后:从1到t时刻正向计算,得到并保存每个时刻的隐藏层的输出向后传播

从后往前:从t时刻向1反向传播,得到并保存每个时刻向后隐藏层的输出

\overrightarrow{h_t}=g(x_tW_{xh}^{(f)}+\overrightarrow{h}_{t-1}W_{hh}^{(f)}+b_h^{(f)})

 \overleftarrow{h_t^{'}}=g(x_tW_{xh}^{(b)}+\overleftarrow{h}_{t+1}^{'}W_{hh}^{(b)}+b_h^{(b)})

对于每个时刻t,输入会同时提供给两个方向相反的RNN。

计算过程是,先从前往后计算h_1、h_2...,h_t,再从后往前计算,最终得到两个隐状态

完整的隐藏状态是把前向和后向的隐藏状态拼接起来

H_t=[\overrightarrow{h_t},\overleftarrow{h^{'}_t}]

如果前向和后向的隐状态都是1000*1维的,拼接后的H_t就是1000*2维的

输出由这两个单向RNN共同决定:

y_t=H_tW_{hq}+b_q

注意:

双向RNN需要保存两个方向的权重矩阵,所以需要的内存约为RNN的两倍。

两条RNN完全独立,不共享参数也不共享状态


 

参考:(46条消息) Keras学习:05.RNN和双向RNN讲解及实践_AI学习社的博客-CSDN博客_双向rnn

41-双向循环神经网络和代码实现-自然语言处理-pytorch_哔哩哔哩_bilibili 

RNN模型与NLP应用(5/9):多层RNN、双向RNN、预训练_哔哩哔哩_bilibili

(46条消息) (五)通俗易懂理解——双向LSTM_Dreamdreams8的博客-CSDN博客_双向lstm


(46条消息) 一幅图真正理解LSTM、BiLSTM_⊙月的博客-CSDN博客_bilstm

Python中可以使用深度学习框架如TensorFlow或PyTorch来实现双向RNN神经网络。双向RNN可以同时考虑上下文信息,对于处理序列数据非常有用。在TensorFlow中,可以使用tf.keras.layers.Bidirectional函数来构建双向RNN层。以下是一个简单的示例代码: ```python import tensorflow as tf # 定义双向RNN模型 model = tf.keras.Sequential(\[ tf.keras.layers.Bidirectional(tf.keras.layers.SimpleRNN(units=64, return_sequences=True), input_shape=(timesteps, input_dim)), tf.keras.layers.Bidirectional(tf.keras.layers.SimpleRNN(units=64)), tf.keras.layers.Dense(units=num_classes, activation='softmax') \]) # 编译模型 model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=\['accuracy'\]) # 训练模型 model.fit(x_train, y_train, epochs=10, batch_size=32) # 使用模型进行预测 predictions = model.predict(x_test) ``` 在上述代码中,我们使用了tf.keras.layers.Bidirectional函数来构建双向RNN层。双向RNN层接受一个RNN单元作为参数,可以是SimpleRNN、LSTM或GRU等。通过设置return_sequences参数为True,我们可以保留每个时间步的输出,否则只保留最后一个时间步的输出。最后,我们添加了一个全连接层来输出预测结果。 需要注意的是,上述代码只是一个简单的示例,实际应用中可能需要根据具体任务和数据进行调整和优化。 #### 引用[.reference_title] - *1* *2* *3* [python自然语言处理—RNN(循环神经网络)](https://blog.csdn.net/weixin_38477351/article/details/108476400)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值