torch实现神经网络
时间: 2023-07-30 17:05:07 浏览: 97
使用 PyTorch 实现神经网络的一般步骤如下:
1. 定义模型结构:使用 `torch.nn` 模块中的类定义神经网络的结构,例如 `nn.Linear` 定义全连接层,`nn.Conv2d` 定义卷积层,`nn.ReLU` 定义激活函数等等。
2. 定义损失函数:使用 `torch.nn` 模块中的类定义损失函数,例如 `nn.MSELoss` 定义均方误差损失函数,`nn.CrossEntropyLoss` 定义交叉熵损失函数等等。
3. 定义优化器:使用 `torch.optim` 模块定义优化器,例如 `optim.SGD` 定义随机梯度下降优化器,`optim.Adam` 定义 Adam 优化器等等。
4. 训练模型:将输入数据传入模型中,计算损失并反向传播,更新模型参数。
5. 测试模型:将测试数据传入模型中,计算输出结果并评估模型性能。
下面是一个简单的例子,演示如何使用 PyTorch 实现一个全连接神经网络:
```python
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, 512)
self.fc2 = nn.Linear(512, 256)
self.fc3 = nn.Linear(256, 10)
def forward(self, x):
x = x.view(-1, 784)
x = torch.relu(self.fc1(x))
x = torch.relu(self.fc2(x))
x = self.fc3(x)
return x
net = Net()
criterion = nn.CrossEntropyLoss()
optimizer = optim.SGD(net.parameters(), lr=0.01, momentum=0.9)
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()
print('Epoch %d loss: %.3f' % (epoch + 1, running_loss / len(trainloader)))
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: %.2f %%' % (100 * correct / total))
```
在这个例子中,我们定义了一个包含三个全连接层的神经网络,并使用交叉熵损失函数和随机梯度下降优化器进行训练。在每个 epoch 结束时,我们输出当前的损失值,最后评估模型的性能并输出准确率。
阅读全文