使用pytorch训练全连接神经网络
时间: 2023-08-26 22:07:15 浏览: 90
全连接神经网络-pytorch
首先需要导入 PyTorch 库:
```python
import torch
import torch.nn as nn
import torch.optim as optim
```
接下来定义一个全连接神经网络模型(也称为多层感知机,MLP),该模型由多个线性层和激活函数组成。下面是一个简单的例子,包含两个隐藏层和一个输出层:
```python
class Net(nn.Module):
def __init__(self):
super(Net, self).__init__()
self.fc1 = nn.Linear(784, 128)
self.fc2 = nn.Linear(128, 64)
self.fc3 = nn.Linear(64, 10)
self.relu = nn.ReLU()
def forward(self, x):
x = x.view(-1, 784)
x = self.relu(self.fc1(x))
x = self.relu(self.fc2(x))
x = self.fc3(x)
return x
```
其中,`nn.Linear` 表示线性层,第一个参数是输入特征数,第二个参数是输出特征数。`nn.ReLU` 表示 ReLU 激活函数。
下一步是定义模型的损失函数和优化器:
```python
net = Net()
criterion = nn.CrossEntropyLoss()
optimizer = optim.SGD(net.parameters(), lr=0.001, momentum=0.9)
```
其中,`nn.CrossEntropyLoss` 表示交叉熵损失函数,`optim.SGD` 表示随机梯度下降优化器,`lr` 表示学习率,`momentum` 表示动量。
接下来是模型的训练过程:
```python
for epoch in range(10):
running_loss = 0.0
for i, data in enumerate(trainloader, 0):
inputs, labels = data
optimizer.zero_grad()
outputs = net(inputs)
loss = criterion(outputs, labels)
loss.backward()
optimizer.step()
running_loss += loss.item()
if i % 1000 == 999:
print('[%d, %5d] loss: %.3f' %
(epoch + 1, i + 1, running_loss / 1000))
running_loss = 0.0
```
其中,`trainloader` 是训练数据的数据加载器,`enumerate` 函数用于遍历数据集,`inputs` 和 `labels` 分别表示输入和标签。
在每个 epoch 中,模型会遍历整个训练集,计算损失并更新参数。每隔一定的步数打印一次损失。
最后,我们可以使用测试集对模型进行评估:
```python
correct = 0
total = 0
with torch.no_grad():
for data in testloader:
images, labels = data
outputs = net(images)
_, predicted = torch.max(outputs.data, 1)
total += labels.size(0)
correct += (predicted == labels).sum().item()
print('Accuracy of the network on the 10000 test images: %d %%' % (
100 * correct / total))
```
其中,`testloader` 是测试数据的数据加载器,`torch.no_grad()` 表示不需要计算梯度,`torch.max` 表示返回最大值和索引。
这就是使用 PyTorch 训练全连接神经网络的基本流程。
阅读全文