如何进行RNN总结及sin与cos拟合应用
发表于:2025-12-03 作者:千家信息网编辑
千家信息网最后更新 2025年12月03日,如何进行RNN总结及sin与cos拟合应用,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。一、RNN总结一个简单的RNN模
千家信息网最后更新 2025年12月03日如何进行RNN总结及sin与cos拟合应用
如何进行RNN总结及sin与cos拟合应用,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
一、RNN总结
一个简单的RNN模型由输入层,一个隐藏层,一个输出层组成。

我们给出这个抽象图对应的具体图,能够很清楚的看到,上一时刻的隐藏层是如何影响当前时刻的隐藏层的。

基于RNN还可以继续扩展到双向循环神经网络,深度循环神经网络。RNN公式如下:
定义RNN类,代码如下:
from torch import nnclass RNN(nn.Module): def __init__(self): super(RNN, self).__init__() self.rnn = nn.RNN( input_size=INPUT_SIZE, # The number of expected features in the input `x` hidden_size=32, # The number of features in the hidden state `h` num_layers=1, # Number of recurrent layers batch_first=True # batch维度是否在前,If ``True``, tensors as `(batch, seq, feature)` ) self.out = nn.Linear(32, 1) # 线性变换 def forward(self, x, h_state): out, h_state = self.rnn(x, h_state) return out, h_state
Tips: 1. RNN的训练算法是BPTT,它的基本原理核BP算法一致,包含同样的三个步骤:1) 前向计算每个神经元的输出值;2)反向计算每个神经元的误差项ᵟ_j值,它是误差函数E对神经元j的加权输出net_j的偏导数;3)计算每个权重的梯度。
2. RNN的梯度消失核爆炸,根据公式的指数形式,β大于或小于1都将造成梯度消失核爆炸问题。
如何避免:1) 梯度爆炸:设置一个梯度阈值,当梯度超过这个阈值的时候可以直接截取 (Gradient Clipping(pytorch nn.utils.clip_grad_norm )) ;好的参数初始化方式,如He初始化; 非饱和的激活函数(如 ReLU) ; 批量规范化(Batch Normalization); LSTM 。2)梯度消失:改进网络LSTM,加入了forget gate。
二、sin与cos拟合应用
函数sin拟合为cos,模型黑盒子类似sin(π/2+α)= cosα
import torchfrom torch import nnimport numpy as npimport matplotlib.pyplot as plt# 定义超参数TIME_STEP = 10INPUT_SIZE = 1learning_rate = 0.001class RNN(nn.Module): def __init__(self): super(RNN, self).__init__() self.rnn = nn.RNN( input_size=INPUT_SIZE, hidden_size=32, num_layers=1, batch_first=True ) self.out = nn.Linear(32, 1) def forward(self, x, h_state): # r_out.shape:seq_len,batch,hidden_size*num_direction(1,10,32) r_out, h_state = self.rnn(x, h_state) out = self.out(r_out).squeeze() return out, h_staternn = RNN()criterion = nn.MSELoss()optimizer = torch.optim.Adam(rnn.parameters(), lr=learning_rate)h_state = Noneplt.figure(1, figsize=(12, 5))plt.ion() # 开启动态交互for step in range(100): start, end = step * np.pi, (step + 1) * np.pi steps = np.linspace(start, end, TIME_STEP, dtype=np.float32, endpoint=False) x_np = np.sin(steps) # x_np.shape: 10 y_np = np.cos(steps) # y_np.shape: 10 x = torch.from_numpy(x_np[np.newaxis, :, np.newaxis]) # x.shape: 1,10,1 y = torch.from_numpy(y_np) # y.shape: 10 prediction, h_state = rnn(x, h_state) h_state = h_state.data loss = criterion(prediction, y) optimizer.zero_grad() loss.backward() optimizer.step() plt.plot(steps, y_np.flatten(), 'r-') plt.plot(steps, prediction.data.numpy().flatten(), 'b-') plt.draw() plt.pause(.05)plt.ioff()plt.show()
看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注行业资讯频道,感谢您对的支持。
梯度
神经
函数
神经元
网络
输出
应用
清楚
公式
参数
时刻
核爆
核爆炸
模型
神经网络
算法
误差
阈值
帮助
循环
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
网络安全法规定的规则
树形 数据库
网络技术漏洞骗局
找不到猎豹服务器的dns.
靖江威力网络技术市场
数据库安全性设计说明
国家网络安全周第几届
网络安全文明上网手抄报一等奖
在哪里设置网络安全级别
5g网络技术的普及
中国影响力人物数据库灿川
中科院遥感数据库
阿里软件开发高级p几
数据库并交差运算条件
末日行者服务器
软件开发税收优惠政策是什么
视频拼接合成软件开发
战网实名连不上服务器
服务器与您的连接
数据库如何约束输入的数字
系统与安全网络技术
网络技术学院怎么样
贵州有哪些软件开发公司
雪亮网络安全吗
靖江威力网络技术市场
何跃鹰网络安全
传奇数据库爬取
终焉誓约服务器多久开放
数据库对象名无效怎么解决
电力网络安全十不准内容