如何进行RNN总结及sin与cos拟合应用
发表于:2025-02-01 作者:千家信息网编辑
千家信息网最后更新 2025年02月01日,如何进行RNN总结及sin与cos拟合应用,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。一、RNN总结一个简单的RNN模
千家信息网最后更新 2025年02月01日如何进行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安全错误
数据库的锁怎样保障安全
乡镇网络安全调研报告
网络安全 真实性
dnf选择服务器连接中
船舶数据网络安全立法
网络安全漏铜
泉州网络安全好就业吗
ericut找到口令服务器
镇江私有服务器工厂
物流中心网络安全指导
8个经典数据库设计实例
郴州市2021网络安全宣传答题
大天使之剑服务器架设
网络安全法13条
三星固件服务器
春哥洗车 数据库
舟山手机软件开发价格便宜
河南鸿英达网络技术有限公司
无线传感网络技术ppt
软件开发迭代
数据库审计需要什么包
快递打单服务器不可达是什么意思
网络安全法关键点是什么
服务器快照管理
在日本地图软件开发
网络安全法第59
奥普软件开发公司
数据库连接池创建连接
最大网络安全事件
唐山用户管理界面软件开发
顺义区信息网络技术推广系统