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

本文介绍了如何在PyTorch中构建和训练LSTM网络,包括many to one型LSTM的模型构建、数据处理、训练验证过程以及测试过程,并展示了随着迭代增加,误差降低且验证集有效防止过拟合的情况。最终测试准确率达到0.9445。
摘要由CSDN通过智能技术生成


  关于LSTM和RNN,可以看我的 blog,关于pytorch的一些基本操作,可以先看我的 blog,这里总结一下如何用pytorch构建LSTM网络,以及如何进行训练验证和测试。

LSTM

many to one型

构建模型

  对于LSTM,我们的数据实际长成 <N, seq_len, features>,N表示记录条数;seq_len表示一条记录的时序步长;features表示每个时序的特征数,也是LSTM在每个时间点实际的输入数据。这里利用pytorch的高度集成的nn.LSTM进行,但是目前这个方法堆叠的LSTM单元的隐层是固定的,即设定隐层数(假设为6)和隐层神经元数(假设为32),6个隐层的神经元数都会是32,如果想改变隐层神经元数,可以考虑使用多个nn.LSTMcell的方法。

  下面的代码按照实际顺序给出,是全部代码,复制时只需按照顺序执行即可

import torch
import torch.nn as nn
import numpy as np
import torchvision
from torch.utils.data import DataLoader
from datetime import datetime  # 用于计算时间

# 定义常量
INPUT_SIZE = 28  # 定义输入的特征数
HIDDEN_SIZE = 32    # 定义一个LSTM单元有多少个神经元
BATCH_SIZE = 32   # batch
EPOCH = 10    # 学习次数
LR = 0.001   # 学习率
TIME_STEP = 28   # 步长,一般用不上,写出来就是给自己看的
DROP_RATE = 0.2    #  drop out概率
LAYERS = 2         # 有多少隐层,一个隐层一般放一个LSTM单元
MODEL = 'LSTM'     # 模型名字

# 定义一些常用函数
# 保存日志
# fname是要保存的位置,s是要保存的内容
def log(fname, s):
    f = open(fname, 'a')
    f.write(str(datetime.now()) + ': ' + s + '\n')
    f.close()

# 定义LSTM的结构
class lstm(nn.Module):
    def __init__(self):
        super(lstm, self).__init__()
        
        self.rnn = nn.LSTM(
            input_size = INPUT_SIZE, 
            hidden_size = HIDDEN_SIZE, 
            num_layers = LAYERS,
            dropout = DROP_RATE,
            batch_first = True    # 如果为True,输入输出数据格式是(batch, seq_len, feature)
                                  # 为False,输入输出数据格式是(seq_len, batch, feature),
        )
        self.hidden_out = nn.Linear(HIDDEN_SIZE, 10)  # 最后一个时序的输出接一个全连接层
        self.h_s = None
        self.h_c = None
        
    def forward(
评论 36
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值