当前位置: 首页 > news >正文

[PyTorch][chapter 48][LSTM -3]

简介:

     主要介绍一下  

      sin(x):  为 数据

      cos(x):   为对应的label

      项目包括两个文件

      main.py:

              模型的训练,验证,参数保存

     lstm.py

              模型的构建

目录:

  1.      lstm.py
  2.      main.py

一 lstm.py

   

# -*- coding: utf-8 -*-
"""
Created on Tue Aug  8 14:01:15 2023@author: chengxf2
"""import torch
import torch.nn as nnclass LSTM(nn.Module):def __init__(self, input_dim, hidden_dim, num_lay, b_first):super(LSTM,self).__init__()self.lstm = nn.LSTM(input_size = input_dim, hidden_size = hidden_dim, num_layers = num_lay, batch_first=b_first)self.linear = nn.Linear(hidden_dim, 1)def forward(self, X):#X.shape:[batch_size=1, seq_num=256, input_size=1]output, (hidden, cell) = self.lstm(X)outs =[]seq_num = output.size(1)#output:[batch_size, seq_num, hidden_dim=64]#hidden.shape:[num_layer, batch_size, hiden_size]#print("\n output.shape",output.shape)#print("\n hidden.shape",hidden.shape)for time_step in range(seq_num):#h.shape[batch, hidden_dim]h = output[:,time_step,:]#print("\n h",h.shape)out = self.linear(h)outs.append(out)#沿着一个新维度对输入张量序列进行连接。 #[batch, seq_num, 1]pred = torch.stack(outs, dim=1)return pred

二  main.py

import numpy as np
from matplotlib import pyplot as plt
import torch
from lstm import LSTM
import torch.nn as nn
from torch.nn import functional as F
from torch import optim
import timedef showDiff(pred, label, steps):plt.figure()plt.rcParams['font.family'] = 'SimHei' # 正常显示中文plt.title('预测值 and 真实值', fontsize='18')plt.plot(steps, pred.cpu().data.numpy().flatten(),color='r',label='预测值')plt.plot(steps, label.cpu().data.numpy().flatten(), color='g',label='真实值')plt.legend(loc='best')plt.show()def get_data(epoch):TIME_STEP = 256start, end = epoch*np.pi, epoch*np.pi+2*np.pisteps = np.linspace(start,end,TIME_STEP,dtype=np.float32)sin_x = np.sin(steps)cos_x = np.cos(steps)sinx_torch = torch.from_numpy(sin_x[np.newaxis, :, np.newaxis])if torch.cuda.is_available():sinx_torch = torch.from_numpy(sin_x[np.newaxis,:,np.newaxis]).cuda()# print('sinx_input.shape:',sinx_input.shape)cosx_lable = torch.from_numpy(cos_x[np.newaxis, :, np.newaxis]).cuda()else:sinx_torch = torch.from_numpy(sin_x[np.newaxis, :, np.newaxis])# print('sinx_input.shape:',sinx_input.shape)cosx_lable = torch.from_numpy(cos_x[np.newaxis, :, np.newaxis])# [batch,seq_num,input_size] (1,256,1)return sinx_torch,cosx_lable,stepsdef eval(model):#等同于 self.train(False) 就是评估模式。#在评估模式下,batchNorm层,dropout层等用于优化训练而添加的网络层会被关闭,从而使得评估时不会发生偏移model.eval()test_data,test_label,steps = get_data(2)with torch.no_grad():y_pred = model(test_data)showDiff(y_pred, test_label, steps)def train(model,maxIter,criterion):'''训练模型----------model : lstm 模型.maxIter : 迭代次数.criterion : 损失函数------'''#作用是启用 batch normalization 和 dropoutmodel.train()time_stamp = time.time()for epoch in range(maxIter):sinx_torch,cosx_lable,steps = get_data(epoch)y_pre = model(sinx_torch)   loss = criterion(y_pre,cosx_lable)optimzer.zero_grad()loss.backward()optimzer.step()if epoch%100==0:data_time_interval = time.time() - time_stampprint('epoch: %d loss: %7.3f interval: %6.2f'%(epoch, loss.detach().numpy(),data_time_interval))#torch.save(model.state_dict(), 'model_params.pth') showDiff(y_pre, cosx_lable,steps)if __name__ == '__main__':input_dim =1hidden_dim = 64num_layers =2batch_first = TruemaxIter = 3000model = LSTM(input_dim, hidden_dim, num_layers, batch_first)DEVICE = torch.device("cuda" if torch.cuda.is_available() else "cpu")optimzer = optim.Adam(model.parameters(),lr=0.0001,weight_decay=0.00001)criterion = nn.MSELoss()model.to(DEVICE)criterion.to(DEVICE)train(model,maxIter,criterion)#model.load_state_dict(torch.load('model_params.pth',map_location='cpu'))#eval(model)

 

参考:

pytorch利用rnn通过sin预测cos 利用lstm预测手写数字_pytorch lstm cos_薛定谔的智能的博客-CSDN博客

http://www.lryc.cn/news/115242.html

相关文章:

  • xss csrf 攻击
  • 如何使用win10专业版系统自带远程桌面公司内网电脑,从而实现居家办公?
  • leetcode做题笔记62
  • 图论 <最短路问题>模板
  • 计算机网络性能指标
  • vue + elementUI 实现下拉树形结构选择部门,支持多选,支持检索
  • 招投标系统简介 企业电子招投标采购系统源码之电子招投标系统 —降低企业采购成本 tbms
  • 半监督学习(主要伪标签方法)
  • datePicker一个或多个日期组件,如何快捷选择多个日期(时间段)
  • 【语音合成】微软 edge-tts
  • elevation mapping学习笔记3之使用D435i相机离线或在线订阅点云和tf关系生成高程图
  • ESP32 Max30102 (3)修复心率误差
  • 16-4_Qt 5.9 C++开发指南_Qt 应用程序的发布
  • oracle容灾备份怎么样Oracle容灾备份
  • AcWing 4957:飞机降落
  • 强化学习研究 PG
  • uniapp微信小程序 401时重复弹出登录弹框问题
  • Cloud Studio实战——热门视频Top100爬虫应用开发
  • php 去除二维数组重复
  • 玩转graphQL
  • 神经网络super(XXX, self).__init__()的含义
  • 45.杜芬方程解仿真解曲线(matlab程序)
  • 服务器数据恢复-EXT3分区误删除邮件的数据恢复案例
  • C 语言的逗号运算符
  • 无人车沿着指定线路自动驾驶与远程控制的实践应用
  • C++ 多态性——纯虚函数与抽象类
  • 小程序如何使用防抖和节流?
  • 计算机三级网络技术(持续更新)
  • Django Rest_Framework(二)
  • Kotlin~Visitor访问者模式