pytorch的BP神经网络代码
时间: 2023-08-25 15:07:55 浏览: 42
下面是一个简单的 PyTorch 实现的 BP 神经网络的代码,包括数据预处理、建立模型、训练和预测等步骤:
```python
import torch
import torch.nn as nn
import torch.optim as optim
from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
# 1. 数据预处理
# 加载数据集
boston = load_boston()
X, y = boston.data, boston.target
# 数据标准化
scaler = StandardScaler()
X = scaler.fit_transform(X)
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 2. 建立模型
class Net(nn.Module):
def __init__(self):
super(Net, self).__init__()
self.fc1 = nn.Linear(13, 64)
self.fc2 = nn.Linear(64, 32)
self.fc3 = nn.Linear(32, 1)
def forward(self, x):
x = torch.relu(self.fc1(x))
x = torch.relu(self.fc2(x))
x = self.fc3(x)
return x
net = Net()
# 3. 训练模型
criterion = nn.MSELoss()
optimizer = optim.Adam(net.parameters(), lr=0.01)
for epoch in range(100):
running_loss = 0.0
for i, data in enumerate(X_train):
inputs = torch.Tensor(data)
labels = torch.Tensor([y_train[i]])
optimizer.zero_grad()
outputs = net(inputs)
loss = criterion(outputs, labels)
loss.backward()
optimizer.step()
running_loss += loss.item()
print("Epoch: %d, Loss: %.3f" % (epoch+1, running_loss/len(X_train)))
# 4. 预测
with torch.no_grad():
y_pred = []
for data in X_test:
inputs = torch.Tensor(data)
outputs = net(inputs)
y_pred.append(outputs.item())
# 打印预测结果和真实值
for i in range(len(y_test)):
print("Predicted: %.3f, True: %.3f" % (y_pred[i], y_test[i]))
```
在上面的代码中,我们使用了 PyTorch 的 `nn.Module` 类来定义一个多层感知机模型,并使用了 `nn.Linear` 层来定义网络的全连接层。我们使用了 `nn.MSELoss` 作为损失函数,用于计算预测值与真实值之间的均方误差。我们使用了 `optim.Adam` 作为优化器,并使用 `net.parameters()` 来获取网络的可训练参数。在训练过程中,我们使用了 PyTorch 的自动求导机制来计算梯度,并使用了 `optimizer.zero_grad()` 来清零梯度。在预测时,我们使用了 `torch.no_grad()` 上下文管理器来关闭自动求导机制,以提高预测的速度。