首页 > 其他分享 >RNN网络的数学理论公式以及torch案例代码

RNN网络的数学理论公式以及torch案例代码

时间:2023-04-19 17:39:55浏览次数:44  
标签:RNN self torch 案例 hidden 隐藏 size

RNN网络的数学理论公式以及torch案例代码

RNN(循环神经网络)是一种深度学习模型,可用于序列数据建模,例如语言模型或时间序列预测。以下是RNN的数学理论公式和torch实现示例。

  • 公式记号

需要注意的是,在训练循环中,我们不需要显式地传递隐藏状态。相反,模型的当前隐藏状态存储在RNN对象的hidden属性中,并在每个时间步自动更新。这是因为我们在forward方法中将模型的当前隐藏状态作为一个实例变量存储,并在每个时间步更新它。

RNN网络的数学理论公式以及torch案例代码_机器学习

其中,

h t h_t ht​ 是当前时间步的隐藏状态;
x t x_t xt​ 是当前时间步的输入;
W i h W_{ih} Wih​ 是输入到隐藏层的权重矩阵;
W h h W_{hh} Whh​ 是隐藏层到隐藏层的权重矩阵;
W h y W_{hy} Why​ 是隐藏层到输出层的权重矩阵;
b i h b_{ih} bih​、 b h h b_{hh} bhh​ 和 b h y b_{hy} bhy​ 分别是输入到隐藏层、隐藏层到隐藏层和隐藏层到输出层的偏置项;
σ \sigma σ 是激活函数,常用的有tanh和ReLU;
softmax \text{softmax} softmax 是输出层的激活函数,用于将输出转换为概率分布。

当需要将RNN的输出传递到另一个线性层时,可以使用以下公式:

RNN网络的数学理论公式以及torch案例代码_深度学习_02

其中,

z t z_t zt​ 是传递到下一个线性层的输出;
W h z W_{hz} Whz​ 是从隐藏层到下一个线性层的权重矩阵;
b h z b_{hz} bhz​ 是下一个线性层的偏置项。

  • 数学理论公式

假设我们有一个输入序列 x 1 , x 2 , . . . , x T x_1, x_2, ..., x_T x1​,x2​,...,xT​,其中 T T T 是序列的长度。给定一个时间步 t t t,RNN模型的输出 h t h_t ht​ 是根据当前输入 x t x_t xt​ 和前一个时间步的隐藏状态 h t − 1 h_{t-1} ht−1​ 计算出来的。RNN模型的隐藏状态 h t h_t ht​ 可以看作是前面所有时间步的信息的累积。

具体地,RNN模型的计算公式为:

RNN网络的数学理论公式以及torch案例代码_深度学习_03

其中 W x h W_{xh} Wxh​ 是输入到隐藏状态的权重矩阵, W h h W_{hh} Whh​ 是隐藏状态到隐藏状态的权重矩阵, b h b_h bh​ 是隐藏状态的偏置向量, f f f 是非线性激活函数(例如tanh或ReLU)。

在某些情况下,RNN模型可能还需要输出一个预测结果 y t y_t yt​。这可以通过将隐藏状态 h t h_t ht​ 传递到另一个线性层来实现:

RNN网络的数学理论公式以及torch案例代码_rnn_04

其中 W h y W_{hy} Why​ 是隐藏状态到输出的权重矩阵, b y b_y by​ 是输出的偏置向量。

  • torch实现代码

以下是一个使用torch实现的简单RNN模型,用于根据前一个时间步的输入 x t − 1 x_{t-1} xt−1​ 预测当前时间步的输出 y t y_t yt​。在此示例中,我们使用单个隐藏层和tanh激活函数。

import torch
import torch.nn as nn

class RNN(nn.Module):
    def __init__(self, input_size, hidden_size, output_size):
        super(RNN, self).__init__()
        self.hidden_size = hidden_size
        self.hidden = None
        
        self.i2h = nn.Linear(input_size + hidden_size, hidden_size)
        self.i2o = nn.Linear(input_size + hidden_size, output_size)
        self.tanh = nn.Tanh()

    def forward(self, input):
        combined = torch.cat((input, self.hidden), 1)
        self.hidden = self.tanh(self.i2h(combined))
        output = self.i2o(combined)
        return output, self.hidden

    def init_hidden(self, batch_size):
        self.hidden = torch.zeros(batch_size, self.hidden_size)

在此代码中,我们定义了一个名为RNN的torch模型。构造函数接受输入大小、隐藏大小和输出大小作为参数,并创建了一个包含两个线性层和一个tanh激活函数的模型。

forward方法接受一个输入张量,并将其与当前隐藏状态组合在一起(使用torch.cat函数)。然后,通过线性层和tanh激活函数计算下一个隐藏状态,并使用计算的输出值。最后,将输出和新的隐藏状态作为元组返回。

init_hidden 方法用于初始化模型的隐藏状态。在此示例中,我们使用torch.zeros函数创建一个大小为(batch_size, hidden_size)的张量作为初始隐藏状态。该方法用于每个新的序列或批次之前调用。

以下是使用上述RNN模型对序列数据进行预测的示例代码:

# 定义模型输入和超参数
input_size = 10
hidden_size = 20
output_size = 1
batch_size = 32
seq_len = 10

# 创建模型和损失函数
model = RNN(input_size, hidden_size, output_size)
criterion = nn.MSELoss()

# 随机生成一些序列数据
inputs = torch.randn(batch_size, seq_len, input_size)
targets = torch.randn(batch_size, seq_len, output_size)

# 初始化隐藏状态
model.init_hidden(batch_size)

# 训练模型
optimizer = torch.optim.Adam(model.parameters(), lr=0.001)

for i in range(100):
    loss = 0
    for j in range(seq_len):
        output, hidden = model(inputs[:, j, :])
        loss += criterion(output, targets[:, j, :])
    optimizer.zero_grad()
    loss.backward()
    optimizer.step()
    print("Epoch %d, Loss: %f" % (i, loss.item()))

在此代码中,我们首先定义了模型的输入大小、隐藏大小、输出大小、批次大小和序列长度。然后,我们创建了RNN模型和一个均方误差损失函数。接下来,我们生成一些随机序列数据作为训练数据,并使用init_hidden方法初始化模型的隐藏状态。

在训练循环中,我们循环遍历序列中的每个时间步,并使用模型计算输出和隐藏状态。然后,我们将损失累加到总损失中,并使用反向传播更新模型参数。最后,我们打印出每个时期的总损失。

标签:RNN,self,torch,案例,hidden,隐藏,size
From: https://blog.51cto.com/guog/6207007

相关文章

  • PyTorch实现联邦学习堆叠自编码器
    联邦学习是一种用于训练分布在不同设备或地点的模型的技术,其中数据分布在不同的设备上,且不会离开设备。每个设备只训练其本地数据的模型,并将更新的模型参数传递给服务器,服务器对这些更新进行聚合以更新全局模型。由于不共享原始数据,因此联邦学习能够提供更好的数据隐私和安全性......
  • 查看torch中的所有函数、方法名
    查看torch中的所有函数、方法名运行程序,就可以看到所有的函数、方法importtorchs=dir(torch)foriins:print(i)输出有一千多个结果AVGAggregationTypeAnyTypeArgumentArgumentSpecBFloat16StorageBFloat16TensorBenchmarkConfigBenchmarkExecutionSta......
  • 基于线性支持向量机的词嵌入文本分类torch案例
    一、前言简介线性支持向量机,并使用线性支持向量机实现文本分类,输入文本通过词嵌入方法转换成浮点张量,给出torch案例线性支持向量机(LinearSupportVectorMachine,简称LinearSVM)是一种常用的分类算法,它通过一个超平面来将数据分成两类。对于线性可分的数据集,线性SVM......
  • 降低就医门槛,提高医疗效率,互联网医院源码应用案例分享
    互联网医院系统源码是基于最新的Web技术和云计算技术所构建的一种全新的医疗信息化平台。该平台可以通过网页、移动APP等多种方式,为患者提供在线预约挂号、线上问诊、电子处方、在线支付等一系列便捷、快速、安全的医疗服务。该系统源码的设计理念是以患者为中心,将医院的各个科室、......
  • 深度学习-Pytorch常见的数据类型
    深度学习-Pytorch常见的数据类型数据类型认识首先,python与PyTorch中的数据类型pythonPyTorchintIntTensorfloatFloatTensorintarrayIntTensorsize[d1,d2,...]floatarrayFloatTensorsize[d1,d2,...]string无在PyTorch中表达String:one-hot即......
  • CANN开发实践:4个DVPP内存问题的典型案例解读
    摘要:由于DVPP媒体数据处理功能对存放输入、输出数据的内存有更高的要求(例如,内存首地址128字节对齐),因此需调用专用的内存申请接口,那么本期就分享几个关于DVPP内存问题的典型案例,并给出原因分析及解决方法。本文分享自华为云社区《FAQ_DVPP内存问题案例》,作者:昇腾CANN。DVPP是昇腾......
  • 【获奖案例巡展】信创先锋之星——甘肃省住房和城乡建设厅住建数据大脑
    为表彰使用大数据、人工智能等基础软件为企业、行业或世界做出杰出贡献和巨大创新的标杆项目,星环科技自2021年推出了“新科技星力量”星环科技科技实践案例评选活动,旨在为各行业提供更多的优秀产品案例,彰显技术改变世界的力量,目前已成功举办两届,收到了来自各界的积极参与。第二届......
  • 【获奖案例巡展】信创先锋之星——中信证券基于国产图数据库构建企业图谱的应用实践
    为表彰使用大数据、人工智能等基础软件为企业、行业或世界做出杰出贡献和巨大创新的标杆项目,星环科技自2021年推出了“新科技星力量”星环科技科技实践案例评选活动,旨在为各行业提供更多的优秀产品案例,彰显技术改变世界的力量,目前已成功举办两届,收到了来自各界的积极参与。 ......
  • 【服务器数据恢复】DELL EqualLogic PS系列存储磁盘坏道导致存储不可用的数据恢复案例
    服务器数据恢复环境:DELLEqualLogicPS系列某型号存储;16块SAS硬盘组成一组RAID5;划分了4个卷,采用VMFS文件系统,存放虚拟机文件。服务器故障:存储设备中磁盘出现故障导致存储不可用,且存储设备已经过保,用户方联系到我们数据恢复中心要求恢复该存储设备中的数据数据。服务器数据恢......
  • 《社区人员管理》实战案例设计&个人案例分享
    作者:京东科技刘宗恺一、项目背景北京市疫情防控一体化平台是以“京办”为支撑,集病例流调、排查管控、隔离管理、人员转运、监测评估于一体的疫情防控平台,秉承五位一体统筹、现有体系融通、共性能力支撑、高效部门系统、快速局部突破的理念,进行建设。1.1技术挑战功能:多系统协作、......