LSTM

LSTM(long-short term memory)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

pytorch应用

lstm = nn.LSTM(input_size=input_dim, hidden_size=hidden_dim, num_layers=n_layers)
out, hidden = lstm(input.view(1, 1, -1), (h0, c0))
在这里插入图片描述

learn gate

合并short term memory and event,忽略其中一部分,只保留重要的一部分,遗忘因子it

在这里插入图片描述

forget gate

forget gate决定遗忘Long term memory中的部分,
在这里插入图片描述

remember gate

结合从forget gate 输出的LTM和learn gate输出的STM
在这里插入图片描述

use gate

在这里插入图片描述

nn.EMbedding()

torch.nn.Embedding(num_embeddings, embedding_dim, padding_idx=None, max_norm=None, norm_type=2.0, scale_grad_by_freq=False, sparse=False, _weight=None)

其为一个简单的存储固定大小的词典的嵌入向量的查找表,意思就是说,给一个编号,嵌入层就能返回这个编号对应的嵌入向量,嵌入向量反映了各个编号代表的符号之间的语义关系。

输入为一个编号列表,输出为对应的符号嵌入向量列表。

参数解释:

num_embeddings (python:int) – 词典的大小尺寸,比如总共出现5000个词,那就输入5000。此时index为(0-4999)

embedding_dim (python:int) – 嵌入向量的维度,即用多少维来表示一个符号。

padding_idx (python:int, optional) – 填充id,比如,输入长度为100,但是每次的句子长度并不一样,后面就需要用统一的数字填充,而这里就是指定这个数字,这样,网络在遇到填充id时,就不会计算其与其它符号的相关性。(初始化为0)

max_norm (python:float, optional) – 最大范数,如果嵌入向量的范数超过了这个界限,就要进行再归一化。

norm_type (python:float, optional) – 指定利用什么范数计算,并用于对比max_norm,默认为2范数。

scale_grad_by_freq (boolean, optional) – 根据单词在mini-batch中出现的频率,对梯度进行放缩。默认为False.

sparse (bool, optional) – 若为True,则与权重矩阵相关的梯度转变为稀疏张量。

torch.max(input,dim)

返回每行/列的最大值(dim=1,0),以及索引

tensor.item()

返回numpy的单个值

LSTM 解码器

在此项目中,我们将所有输入当做序列传入 LSTM 中。序列看起来这样:首先是从输入图像中提取的特征向量,然后是起始单词,然后下个单词,再下个单词,等等!

嵌入维度
该 LSTM 定义为:按顺序查看输入时,要求序列中的每个输入大小一致,因此我们嵌入特征向量和每个单词,使其为 embed_size。

序列输入
LSTM 会按顺序查看输入。在 PyTorch 中,有两种方式实现这一点。

  • 第一种很直观:对于序列中的所有输入,在此项目中是图像中的特征、起始单词、下个单词、下个单词,以此类推(直到序列/批次的结束),如下所示地循环访问每个输入:
for i in inputs:
    # Step through the sequence one element at a time.
    # after each step, hidden contains the hidden state.
    out, hidden = lstm(i.view(1, 1, -1), hidden)
  • 第二种方法(此项目用到的方法)是向 LSTM 提供整个序列,使其生成输出集合和最后一个隐藏状态:
    LSTM 返回的第一个值是序列中的所有隐藏状态。第二个是最近的隐藏状态添加额外的第二个维度
inputs = torch.cat(inputs).view(len(inputs), 1, -1)
hidden = (torch.randn(1, 1, 3), torch.randn(1, 1, 3))  # clean out hidden state
out, hidden = lstm(inputs, hidden)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值