torch.nn.RNN 回归预测
时间: 2025-04-04 17:11:55 浏览: 44
### 使用 `torch.nn.RNN` 进行回归预测
在 PyTorch 中,`torch.nn.RNN` 可以用来处理序列数据并实现回归预测任务。以下是关于如何使用该模块完成回归预测的具体方法和示例代码。
#### 参数设置说明
`torch.nn.RNN` 的主要参数包括输入维度、隐藏层单元数以及层数等。这些参数决定了 RNN 网络的结构及其能力范围[^3]。具体来说:
- 输入大小 (`input_size`) 表示每个时间步的特征向量长度。
- 隐藏层大小 (`hidden_size`) 定义了隐状态的维度。
- 层数 (`num_layers`) 控制堆叠的 RNN 层的数量。
对于回归任务而言,通常会将最后一个时间步的输出传递到全连接层来生成最终的预测值。
#### 示例代码
下面是一个完整的例子,展示如何利用 `torch.nn.RNN` 构建一个简单的回归模型,并对其进行训练。
```python
import torch
import torch.nn as nn
from torch.optim import Adam
class SimpleRNN(nn.Module):
def __init__(self, input_dim, hidden_dim, num_layers, output_dim):
super(SimpleRNN, self).__init__()
self.rnn = nn.RNN(input_dim, hidden_dim, num_layers, batch_first=True)
self.fc = nn.Linear(hidden_dim, output_dim)
def forward(self, x):
out, _ = self.rnn(x) # 获取RNN最后一层的输出
out = self.fc(out[:, -1, :]) # 提取最后一步的状态并通过线性变换得到结果
return out
# 超参数设定
input_dim = 10 # 输入特征数量
hidden_dim = 20 # 隐含层节点数量
output_dim = 1 # 输出维度(单变量回归)
num_layers = 2 # 堆叠的RNN层数
learning_rate = 0.01
epochs = 100
# 初始化模型、损失函数和优化器
model = SimpleRNN(input_dim=input_dim, hidden_dim=hidden_dim,
num_layers=num_layers, output_dim=output_dim)
criterion = nn.MSELoss()
optimizer = Adam(model.parameters(), lr=learning_rate)
# 创建虚拟数据集
batch_size = 5
sequence_length = 8
X_train = torch.randn(batch_size, sequence_length, input_dim)
y_train = torch.randn(batch_size, output_dim)
# 训练过程
for epoch in range(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(f'Epoch [{epoch+1}/{epochs}], Loss: {loss.item():.4f}')
```
上述代码展示了如何通过定义自定义类继承 `nn.Module` 来创建基于 RNN 的回归模型,并完成了基本的数据拟合操作[^1]。
#### 关键点解释
- 数据形状:由于设置了 `batch_first=True`,因此输入张量应具有 `(batch_size, seq_len, feature)` 形状。
- 模型架构设计:除了核心部分即 RNN 外部还附加了一层全连接层用于映射至目标空间尺寸。
- 损失评估采用均方误差作为衡量标准适合连续数值预测场景下性能指标的选择之一[^2]。
阅读全文
相关推荐



















