使用pytorch构建一个隐藏层包含12个神经元的三层BP神经网络多输入多输出预测模型,以0.7:0.15:0.15划分训练集、验证集、测试集,以RMSE评价模型的有效性,梯度下降法作为优化器,给每一行代码标出注释
时间: 2024-05-08 09:18:09 浏览: 111
Sure, 我会尽力回答您的问题。以下是您要求的代码示例:
```
import torch
import torch.nn as nn
from sklearn.metrics import mean_squared_error
from sklearn.model_selection import train_test_split
# 定义三层BP神经网络
class Net(nn.Module):
def __init__(self, input_dim, hidden_dim, output_dim):
super(Net, self).__init__()
self.fc1 = nn.Linear(input_dim, hidden_dim)
self.relu = nn.ReLU()
self.fc2 = nn.Linear(hidden_dim, hidden_dim)
self.fc3 = nn.Linear(hidden_dim, output_dim)
def forward(self, x):
out = self.fc1(x)
out = self.relu(out)
out = self.fc2(out)
out = self.relu(out)
out = self.fc3(out)
return out
# 设置随机种子,保证结果可以重复
torch.manual_seed(42)
# 生成随机输入和输出样本
X = torch.randn(1000, 5)
y = torch.randn(1000, 3)
# 划分训练集、验证集、测试集
X_train, X_val_test, y_train, y_val_test = train_test_split(X, y, test_size=0.3)
X_val, X_test, y_val, y_test = train_test_split(X_val_test, y_val_test, test_size=0.5)
# 设置超参数
input_dim = 5
hidden_dim = 12
output_dim = 3
lr = 0.01
num_epochs = 100
# 初始化模型及优化器
net = Net(input_dim, hidden_dim, output_dim)
criterion = nn.MSELoss()
optimizer = torch.optim.SGD(net.parameters(), lr)
# 训练模型
for epoch in range(num_epochs):
# 将输入和输出放入模型中,计算预测值和损失
outputs = net(X_train)
loss = criterion(outputs, y_train)
# 清空优化器梯度,计算反向传播梯度,更新参数
optimizer.zero_grad()
loss.backward()
optimizer.step()
# 用验证集评估模型
val_outputs = net(X_val)
val_loss = criterion(val_outputs, y_val)
print('Epoch [{}/{}], Loss: {:.4f}, Val Loss: {:.4f}'.format(epoch+1, num_epochs, loss.item(), val_loss.item()))
# 用测试集评价模型
test_outputs = net(X_test)
rmse = mean_squared_error(y_test.detach().numpy(), test_outputs.detach().numpy(), squared=False)
print('RMSE: {:.4f}'.format(rmse))
```
这是一个使用 PyTorch 构建的三层 BP 神经网络多输入多输出预测模型示例代码,其中三个输入特征、12个隐藏层神经元和三个输出特征的维度可以根据您的数据集进行灵活调整。训练集、验证集和测试集的划分比例为 0.7:0.15:0.15。损失函数为均方误差(MSELoss),优化器为随机梯度下降法(SGD)。模型的有效性通过 RMSE 指标进行评价。
阅读全文