使用pytorch写一个bp神经网络模型
时间: 2024-05-09 20:15:42 浏览: 115
好的,以下是一个使用 PyTorch 实现的简单的 BP 神经网络模型:
```python
import torch
import torch.nn as nn
import torch.optim as optim
# 定义神经网络模型
class Net(nn.Module):
def __init__(self, input_size, hidden_size, output_size):
super(Net, self).__init__()
self.fc1 = nn.Linear(input_size, hidden_size)
self.fc2 = nn.Linear(hidden_size, output_size)
self.relu = nn.ReLU()
def forward(self, x):
out = self.fc1(x)
out = self.relu(out)
out = self.fc2(out)
return out
# 定义训练函数
def train(net, X, Y, learning_rate, epochs):
criterion = nn.MSELoss()
optimizer = optim.SGD(net.parameters(), lr=learning_rate)
for epoch in range(epochs):
optimizer.zero_grad()
out = net(X)
loss = criterion(out, Y)
loss.backward()
optimizer.step()
if epoch % 10 == 0:
print('Epoch [{}/{}], Loss: {:.4f}'.format(epoch+1, epochs, loss.item()))
# 生成数据集
X = torch.tensor([[0,0], [0,1], [1,0], [1,1]], dtype=torch.float32)
Y = torch.tensor([[0], [1], [1], [0]], dtype=torch.float32)
# 定义模型参数
input_size = 2
hidden_size = 2
output_size = 1
learning_rate = 0.1
epochs = 1000
# 初始化模型
net = Net(input_size, hidden_size, output_size)
# 训练模型
train(net, X, Y, learning_rate, epochs)
# 测试模型
with torch.no_grad():
output = net(X)
print(output)
```
在上面的代码中,我们定义了一个两层的神经网络模型 `Net`,使用了 `nn.Linear` 和 `nn.ReLU` 两个层。我们使用了均方误差作为损失函数,使用随机梯度下降作为优化器进行训练。我们使用 XOR 问题作为训练数据集。最后,我们使用 `torch.no_grad()` 避免梯度计算,测试模型的输出。
阅读全文