LSTM的学习和一个使用实例

循环神经网络:

  • RNN:具有短期记忆的网络结构,把之前的输出作为下一个的输入
  • RNN类型:
    • one-to-one:图像分类
    • one-to many:图像转文字
    • many-to-one:文本分类
    • 异步的many-to-many:文本翻译
    • 同步的many-to-many:视屏分类
  • LSTM:    long short-term memory
    • 遗忘门:通过sigmoid来决定哪些信息被遗忘
    • 输入门:决定哪些信息会被输入
      • sigmoid决定输入多少比例信息
      • tanh决定输入什么信息
    • 输出门:
      • 输出当前时刻的结果和hidden_state
      • hidden_state=h_t

  • GRU:LSTM的变形
    • 两个门:更新门和输出门

LSTM的api:

import torch
torch.nn.LSTM(input_size='输入数据的形状,即embedding_dim',
              hidden_size='隐藏层的数量,即每一层有多少个LSTM单元',
              num_layers='LSTM单元层数',
              batch_first='默认为false,输入数据是:[seq_len,bath_size,dim],当是true时输入数据是:[bath_size,seq_len,dim]',
              dropout='是一种训练过程中让部分参数随机失活的一种方式,能够提高训练速度同时能够解决拟合问题,这里是LSTM的最后一层,对每个输出进行dropout',
              bidirectional='是否使用LSTM,默认是false')
  •  一个词语我们可以理解为由长度是embedding_dim的向量表示,seq_len是指句子长度
  • input为[bath_size,seq_len,embedding_dim]batch_first=false,hidden_size表示LSTM中的单元数量
  • output为[seq_len,bath_szie,hidden_size*[num_directions]]//num_directions双向是2,单向是1
  • 原理图示:
  • h_n:(num_layers*num_directions,batch_size,hidden_size)#num_directions同上
  • c_n:(num_layers*num_directions,batch_size,hidden_size)#num_directions同上

 LSTM的使用示例:

import torch.nn as nn
import torch
batch_size=10
seq_len=20#句子的长度
vocab_size=100#词典的数量
embedding_dim=30#用长度是30的向量表示一个词语
hidden_size=18#embedding_dim维数
num_layer=1#:LSTM中的层数
input=torch.randint(0,100,[batch_size,seq_len])#[10,20]维度
# print(input)
embedding=nn.Embedding(vocab_size,embedding_dim)
input=embedding(input)#[10,20,30]维度
#把embedding 之后的数据传入list
lstm=nn.LSTM(input_size=embedding_dim,hidden_size=hidden_size,num_layers=num_layer,batch_first=True)
output,(h_n,c_n)=lstm(input)
print(output)
print("*"*100)
print(h_n)
print("*"*100)
print(c_n)
print("*"*100)
print(output.size())
print("*"*100)
print(h_n.size())
print("*"*100)
print(c_n.size())
print("*"*100)

交叉熵损失:

1、对输出值计算softmax和取对数

  • output=F.log_softmax(x,dim=-1)

2、使用torch中的带权损失

  • loss=F.nll_loss(output,target)
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小李小于

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值