Pytorch:搭建RNN方法和过程分析

本文详细介绍了如何在PyTorch中搭建RNN模型,包括`__init__`方法中定义RNN和线性层,以及`forward`方法中的数据流动过程。通过例子解释了RNN的输入输出格式,强调了当`batch_first=True`时,输入和输出Tensor的shape为[batch_size, time_step, feature]。" 90716749,8509726,Numpy argsort 深入解析与示例,"['Python', 'Numpy', '数据处理', '数组排序']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、pytorch创建RNN模型和训练模型的代码

import torch
from torch import nn
from torch.autograd import Variable

#定义RNN模型
class RNN(nn.Module):
    def __init__(self):
        super(RNN, self).__init__()

        self.rnn = nn.RNN(
            input_size=1,
            hidden_size=32,
            num_layers=2,
            batch_first=True,
        )
        self.linear = nn.Linear(32, 1)

    def forward(self, x, h_n): 
        r_out, h_n = self.rnn(x, h_n)

        outs = []
        for step in range(r_out.size(1)):
            outs.append(self.linear(r_out[:, step, :]))
        
        return torch.stack(outs, dim=1), h_n


#创建模型
net = RNN()

#========以下是训练过程===========

#获取样本和标签(此处为numpy格式,shape=(batch_size, time_step, feature))
sample = ……
label = ……

#将样本和标签转化为Variable
x = Variable(torch.Tensor(sample).type(torch.FloatTensor))
y = Variable(torch.Tensor(label).type(torch.FloatTensor))
    
#优化器(举例)
optimizer = torch.optim.Adam(net.parameters(), lr=0.02)
#损失函数(举例)
loss_func = nn.MSELoss()
    
#初次传入RNN的隐藏层状态
h_n = None    
#训练100轮
for i in range(100):
    #将样本和隐藏层状态输入到模型中,得到模型输出值和更新后的隐藏层状态
    prediction, h_n = net(x, h_n)
    h_n = h_n.data
    #计算损失值
    loss = loss_func(prediction, y)
    #输出损失值
    print('round ' + str(i) + ' ' +str(loss))
    optimizer.zero_grad()
    loss.backward()
    optimizer.step()
        
    #每训练100轮保存1次模型
    if (i+1)%100 == 0:
        torch.save(net, 'net.pkl')

2、代码的分析

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值