网站好玩新功能,免费手机网站制作,论坛平台,湖州网站建设湖州人工智能例子汇总#xff1a;AI常见的算法和例子-CSDN博客
PyTorch 提供三种主要的 RNN 变体#xff1a;
nn.RNN#xff1a;最基本的循环神经网络#xff0c;适用于短时依赖任务。nn.LSTM#xff1a;长短时记忆网络#xff0c;适用于长序列数据#xff0c;能有效解决… 人工智能例子汇总AI常见的算法和例子-CSDN博客
PyTorch 提供三种主要的 RNN 变体
nn.RNN最基本的循环神经网络适用于短时依赖任务。nn.LSTM长短时记忆网络适用于长序列数据能有效解决梯度消失问题。nn.GRU门控循环单元比 LSTM 计算更高效适用于大部分任务。
网络类型优势适用场景RNN计算简单适用于短时序列语音、文本处理短序列LSTM适用于长序列能记忆长期信息机器翻译、语音识别、股票预测GRU比 LSTM 计算更高效效果相似语音处理、文本生成 例子
import torch
import torch.nn as nn
import torch.optim as optim
import matplotlib.pyplot as plt# 1. 生成正弦波数据仅使用 PyTorch
def generate_sine_wave(seq_length10, num_samples1000):x torch.linspace(0, 100, num_samples) # 生成 1000 个等间距数据点y torch.sin(x) # 计算正弦值X_data, Y_data [], []for i in range(len(y) - seq_length):X_data.append(y[i:i seq_length].unsqueeze(-1)) # 过去 seq_length 作为输入Y_data.append(y[i seq_length]) # 预测下一个点return torch.stack(X_data), torch.tensor(Y_data).unsqueeze(-1)# 生成数据
seq_length 10 # 序列长度
X, Y generate_sine_wave(seq_length)# 划分训练集和测试集
train_size int(0.8 * len(X))
X_train, X_test X[:train_size], X[train_size:]
Y_train, Y_test Y[:train_size], Y[train_size:]# 2. 定义 RNN 模型
class SimpleRNN(nn.Module):def __init__(self, input_size, hidden_size, output_size, num_layers1):super(SimpleRNN, self).__init__()self.hidden_size hidden_sizeself.num_layers num_layersself.rnn nn.RNN(input_size, hidden_size, num_layers, batch_firstTrue)self.fc nn.Linear(hidden_size, output_size)def forward(self, x):h0 torch.zeros(self.num_layers, x.size(0), self.hidden_size) # 初始化隐藏状态out, _ self.rnn(x, h0)out self.fc(out[:, -1, :]) # 取最后一个时间步的输出return out# 3. 训练模型
# 超参数
input_size 1
hidden_size 32
output_size 1
num_layers 1
num_epochs 100
learning_rate 0.001# 初始化模型
model SimpleRNN(input_size, hidden_size, output_size, num_layers)
criterion nn.MSELoss()
optimizer optim.Adam(model.parameters(), lrlearning_rate)# 训练
for epoch in range(num_epochs):model.train()optimizer.zero_grad()outputs model(X_train)loss criterion(outputs, Y_train)loss.backward()optimizer.step()if (epoch 1) % 10 0:print(fEpoch [{epoch 1}/{num_epochs}], Loss: {loss.item():.4f})# 4. 评估与绘图
model.eval()
with torch.no_grad():predictions model(X_test)# 画图
plt.figure(figsize(10, 5))
plt.plot(Y_test.numpy(), labelReal Data)
plt.plot(predictions.numpy(), labelPredicted Data)
plt.legend()
plt.title(RNN Sine Wave Prediction)
plt.show()代码解析
数据生成
torch.linspace(0, 100, num_samples) 生成 1000 个均匀分布的数据点。torch.sin(x) 计算正弦值形成时间序列数据。X 为过去 10 个时间步的数据Y 为下一个时间步的预测目标。
构建 RNN
nn.RNN(input_size, hidden_size, num_layers, batch_firstTrue) 定义循环神经网络 input_size1每个时间步只有一个输入值正弦波。hidden_size32隐藏层神经元数目。num_layers1单层 RNN。 self.fc nn.Linear(hidden_size, output_size) 负责最终输出。
训练
使用 MSELoss均方误差损失 计算预测值与真实值的误差。使用 Adam 优化器 更新模型参数。每 10 个 epoch 输出一次损失 loss。
测试 绘图
关闭梯度计算 (torch.no_grad())执行前向传播预测测试数据。Matplotlib 绘制预测曲线与真实曲线。 运行效果
如果训练成功预测曲线橙色应该与真实曲线蓝色非常接近