Bi-LSTM

本文介绍了Bi-LSTM的工作原理,通过前后两个LSTMCell分别处理输入序列的正向和反向信息。在TensorFlow中构建Bi-LSTM网络,包括字符嵌入、LSTM层、Dropout和多层LSTM的实现,并展示了如何堆叠双向RNN层进行计算。最后,通过全连接层对Bi-LSTM的输出进行转换,用于预测任务。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

https://blog.youkuaiyun.com/vivian_ll/article/details/88974691
https://blog.youkuaiyun.com/jerr__y/article/details/70471066

在这里插入图片描述

Bi-LSTM大致的思路是这样的,看图中最下方的输入层,假设一个样本(句子)有10个 timestep (字)的输入 x1,x2,…,x10x1,x2,…,x10。 现在有两个相互分离的 LSTMCell:

对于前向 fw_cell ,样本按照x1,x2,…,x10x1,x2,…,x10 的顺序输入 cell 中,得到第一组状态输出 {h1,h2,…,h10h1,h2,…,h10} ;
对于反向 bw_cell ,样本按照 x10,x9,…,x1x10,x9,…,x1 的反序输入 cell 中,得到第二组状态输出 {h10,h9,…,h1h10,h9,…,h1 };
得到的两组状态输出的每个元素是一个长度为 hidden_size 的向量(一般情况下,h1h1和h1h1长度相等)。现在按照下面的形式把两组状态变量拼起来{[h1h1,h1h1], [h2h2,h2h2], … , [h10h10,h10h10]}。
最后对于每个 timestep 的输入 xtxt, 都得到一个长度为 2*hidden_size 的状态输出 HtHt= [htht,htht]。然后呢,后面处理方式和单向 LSTM 一样。

def bi_lstm(X_inputs):
“”“build the bi-LSTMs network. Return the y_pred”""
*** 0.char embedding,请自行理解 embedding 的原理!!做 NLP 的朋友必须理解这个
embedding = tf.get_variable(“embedding”, [vocab_size, embedding_size], dtype=tf.float32)
X_inputs.shape = [batchsize, timestep_size] -> inputs.shape = [batchsize, timestep_size, embedding_size]
inputs = tf.nn.embedding_lookup(embedding, X_inputs)
** 1.LSTM 层 ***
lstm_fw_cell = rnn.BasicLSTMCell(hidden_size, forget_bi

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值