1  lstm理论部分

详细可见 机器学习笔记 RNN初探_刘文巾的博客-CSDN博客

2 torch.nn.LSTM

2.1 参数

– input_size

– hidden_size

– num_layers

– bias

– batch_first :设置了之后,输出的维度为(batch, seq_len, hidden_size);否则为(seq_len,batch,hidden_size)

– dropout

– bidirectional

2.2 输入

– input (seq_len, batch, input_size)

– h_0 (num_layers * num_directions, batch, hidden_size)

– c_0 (num_layers * num_directions, batch, hidden_size)

seq_len:每一次喂入的sequence有多长(一句话有几个单词)

input_size:每一个单词的embedding dimension(一个word是由几个维度的embedding组成的)

num_layers:有几层RNN

num_directions:是单向RNN还是双向RNN

hidden_size:隐藏层的维度(每个单词在隐藏层中有多少维组成它的embedding)

2.3 输出

– output (seq_len, batch, num_directions * hidden_size)
– h_n (num_layers * num_directions, batch, hidden_size)
– c_n (num_layers * num_directions, batch, hidden_size)

3 pytorch实现

我们还是用用pytorch实现简易RNN_刘文巾的博客-CSDN博客 一样的例子,记用sin预测cos,以示对照

3.1 导入库 & 超参数设定

import torch
import numpy as np
import matplotlib.pyplot as pltTIME_STEP=10
INPUT_SIZE=1
HIDDEN_SIZE=32
LR=0.02

3.2 定义LSTM

class LSTM(torch.nn.Module):def __init__(self):super(LSTM,self).__init__()self.lstm=torch.nn.LSTM(input_size=INPUT_SIZE,hidden_size=HIDDEN_SIZE,num_layers=1,batch_first=True)'''
batch_first的用法和RNN是一样的
设置batch_first为True,那么输入数据的维度为(batch_size,time_step,input_size)
如果不设置这个值,或者设置为False,那么输入数据的维度为(time_step,batch_size,input_size)'''self.out=torch.nn.Linear(HIDDEN_SIZE,1)#__init__部分和RNN几乎是一样的def forward(self,x,h_n,h_c):
#和RNN类似,上一个时间片的隐藏层状态也要一直传下去,只不过这边我们要传两个值r_out,(h_n,h_c)=self.lstm(x,(h_n,h_c))
#r_out [Batch_size,Time_step(即前面的seq_len),hidden_size]
#h_n h_c [Batch_size,num_layers*num_direction,hidden]r_out=r_out.view(-1,HIDDEN_SIZE)out=self.out(r_out)out=out.view(-1,TIME_STEP,1)return(out,(h_n,h_c))lstm=LSTM()
print(lstm)
'''
LSTM((lstm): LSTM(1, 32, batch_first=True)(out): Linear(in_features=32, out_features=1, bias=True)
)
'''

3.3 设定优化函数和损失函数

optimizer=torch.optim.Adam(lstm.parameters(),lr=LR)loss_func=torch.nn.MSELoss()

3.4 训练与验证模型

h_n=torch.zeros((1,1,HIDDEN_SIZE))
h_c=torch.zeros((1,1,HIDDEN_SIZE))
for step in range(100):start=step*np.piend=(step+1)*np.pisteps=np.linspace(start,end,TIME_STEP,dtype=np.float32)
#这里dtype这一部分一定要加,不然的话会报错
#RuntimeError: expected scalar type Double but found Floatx_np=np.sin(steps).reshape(1,TIME_STEP,INPUT_SIZE)y_np=np.cos(steps).reshape(1,TIME_STEP,1)#和RNN一样,目标:用sin预测cosx=torch.from_numpy(x_np)y=torch.from_numpy(y_np)prediction,(h_n,h_c)=lstm(x,h_n,h_c)h_n=h_n.datah_c=h_c.data
#隐藏状态向后传loss=loss_func(prediction,y)optimizer.zero_grad()#清空上一步的参与更新参数值loss.backward()#误差反向传播,计算参数更新值optimizer.step()#将参数更新值施加到rnn的parameters上if(step % 10==0):plt.plot(steps,prediction.data.numpy().flatten(),'g*')plt.plot(steps,y_np.flatten(),'r-')plt.show()

4 实验结果

4.1 一开始

最后

pytorch笔记:实现简易LSTM相关推荐

  1. pytorch笔记:构建LSTM网络,实现训练验证和测试过程

    文章目录 LSTM many to one型 构建模型 数据归一化和分割 训练和验证过程 测试过程 many to many型   关于LSTM和RNN,可以看我的 blog,关于pytorch的一些 ...

  2. pytorch笔记:policy gradient

    本文参考了 策略梯度PG( Policy Gradient) 的pytorch代码实现示例 cart-pole游戏_李莹斌XJTU的博客-CSDN博客_策略梯度pytorch 在其基础上添加了注释和自 ...

  3. pytorch 笔记:torchsummary

    作用:打印神经网络的结构 以pytorch笔记:搭建简易CNN_UQI-LIUWJ的博客-CSDN博客 中搭建的CNN为例 import torch from torchsummary import ...

  4. pytorch 笔记:使用Tune 进行调参

    自动进行调参,我们以pytorch笔记:搭建简易CNN_UQI-LIUWJ的博客-CSDN博客的代码为基础,进行output_channel和learning rate的调参 1 导入库 from f ...

  5. PYTORCH笔记 actor-critic (A2C)

    理论知识见:强化学习笔记:Actor-critic_UQI-LIUWJ的博客-CSDN博客 由于actor-critic是policy gradient和DQN的结合,所以同时很多部分和policy ...

  6. pytorch 笔记:手动实现AR (auto regressive)

    1 导入库& 数据说明 import numpy as np import torch import matplotlib.pyplot as plt from tensorboardX im ...

  7. pytorch 笔记:tensorboardX

    1 SummaryWriter 1.1 创建 首先,需要创建一个 SummaryWriter 的示例: from tensorboardX import SummaryWriter#以下是三种不同的初 ...

  8. pytorch 笔记:DataLoader 扩展:构造图片DataLoader

    数据来源:OneDrive for Business 涉及内容:pytorch笔记:Dataloader_UQI-LIUWJ的博客-CSDN博客 torchvision 笔记:ToTensor()_U ...

  9. (d2l-ai/d2l-zh)《动手学深度学习》pytorch 笔记(2)前言(介绍各种机器学习问题)以及数据操作预备知识Ⅰ

    开源项目地址:d2l-ai/d2l-zh 教材官网:https://zh.d2l.ai/ 书介绍:https://zh-v2.d2l.ai/ 笔记基于2021年7月26日发布的版本,书及代码下载地址在 ...

  10. tensorflow笔记:多层LSTM代码分析

    tensorflow笔记系列:  (一) tensorflow笔记:流程,概念和简单代码注释  (二) tensorflow笔记:多层CNN代码分析  (三) tensorflow笔记:多层LSTM代 ...

最新文章

  1. Netty源码分析第1章(Netty启动流程)----第4节: 注册多路复用
  2. python常用模块之shelve模块
  3. how to use the mathmatical constant e in conjunction with a vector
  4. 计算机排版基础知识,计算机排版基础知识.pdf
  5. download first at netease music
  6. ios jenkins_如何使用Jenkins和Fastlane制作iOS点播构建系统
  7. 记一次生产数据库系统内存使用过高的案例
  8. MySQL utf8mb4字符集配置,支持emoji表情存储
  9. android_ndk_build_flags 配置,Android studio配置NDK问题小结
  10. 使用NRF52xx sniffer抓取BLE包
  11. SWUST OJ 492: The Dutch flag problem
  12. c# WPF中通过双击编辑DataGrid中Cell的示例(附源码)
  13. Excel-VBA 快速上手(四、Excel 程序事件、工作簿事件、工作表事件)
  14. VueDemo-12.加入购物车
  15. 入侵WIN2003 PHP服务器的另类技术
  16. 什么是 SAP Support Package Stack
  17. ubuntu rsync 命令拷贝,显示进度
  18. 【BUUCTF】[MRCTF2020]套娃
  19. AYITOJ ROUND #1题解
  20. Vue生命周期(vue life cycle) 详解

热门文章

  1. Java编程的逻辑 (29) - 剖析String
  2. 语音增强原理之噪声估计
  3. 范例解析:学习Android的IPC主板模式
  4. 小菜学习Lucene.Net(更新3.0.3版本使用)
  5. HDU 2041 超级楼梯
  6. POJ-2531 Network Saboteur 枚举||随机化
  7. SET IDENTITY_INSERT [Table] [ON|OFF]
  8. Leetcode255用队列构造栈
  9. 下次激活策略10_巅峰武侠卡牌巨制手游乱世江湖1元商城特权bt版今日10:00上线_乱世江湖...
  10. 计算机 双 ip地址,win7双ip怎么设置_Win7电脑如何设置双IP地址