pytorch搭建bp神经网络
时间: 2023-10-07 17:10:38 浏览: 120
以下是使用PyTorch搭建BP神经网络的代码示例:
```
import torch
import torch.nn as nn
import torch.optim as optim
# 定义神经网络模型
class Net(nn.Module):
def __init__(self):
super(Net, self).__init__()
self.fc1 = nn.Linear(784, 256)
self.fc2 = nn.Linear(256, 64)
self.fc3 = nn.Linear(64, 10)
self.relu = nn.ReLU()
self.softmax = nn.Softmax(dim=1)
def forward(self, x):
x = self.relu(self.fc1(x))
x = self.relu(self.fc2(x))
x = self.softmax(self.fc3(x))
return x
# 定义训练函数
def train(model, train_loader, optimizer, criterion):
model.train()
for i, (inputs, targets) in enumerate(train_loader):
optimizer.zero_grad()
outputs = model(inputs.view(-1, 784))
loss = criterion(outputs, targets)
loss.backward()
optimizer.step()
# 定义测试函数
def test(model, test_loader):
model.eval()
correct = 0
total = 0
with torch.no_grad():
for inputs, targets in test_loader:
outputs = model(inputs.view(-1, 784))
_, predicted = torch.max(outputs.data, 1)
total += targets.size(0)
correct += (predicted == targets).sum().item()
accuracy = correct / total
return accuracy
# 加载数据集
train_loader = torch.utils.data.DataLoader(
torchvision.datasets.MNIST('./data', train=True, download=True,
transform=torchvision.transforms.Compose([
torchvision.transforms.ToTensor(),
torchvision.transforms.Normalize((0.1307,), (0.3081,))
])),
batch_size=64, shuffle=True)
test_loader = torch.utils.data.DataLoader(
torchvision.datasets.MNIST('./data', train=False, download=True,
transform=torchvision.transforms.Compose([
torchvision.transforms.ToTensor(),
torchvision.transforms.Normalize((0.1307,), (0.3081,))
])),
batch_size=64, shuffle=True)
# 初始化模型、损失函数、优化器
model = Net()
criterion = nn.CrossEntropyLoss()
optimizer = optim.SGD(model.parameters(), lr=0.1)
# 训练模型
for epoch in range(10):
train(model, train_loader, optimizer, criterion)
accuracy = test(model, test_loader)
print(f'Epoch {epoch+1}, Test Accuracy: {accuracy:.4f}')
```
在上面的代码中,我们首先定义了一个`Net`类来搭建神经网络模型。该模型有三个全连接层和两个激活函数(ReLU和Softmax)。`forward`方法实现前向传播过程。
接着,我们定义了训练函数`train`和测试函数`test`,分别用于训练和测试模型。在训练函数中,我们首先将模型设置为训练模式,然后遍历训练数据集,计算模型输出和损失,并进行反向传播和参数更新。在测试函数中,我们将模型设置为评估模式,然后使用测试数据集进行模型测试,并计算模型的准确率。
最后,我们加载MNIST数据集,初始化模型、损失函数和优化器,并开始训练模型。在训练过程中,我们遍历数据集若干次(这里是10次),每次训练时都调用`train`函数更新模型,然后调用`test`函数测试模型的准确率。
阅读全文