基于mnist的MLP
时间: 2023-10-19 19:05:45 浏览: 144
基于Python的MLP多层感知器及MINIST数字分类实现实例
MNIST是一个手写数字数据集,其中包含有60,000个训练图像和10,000个测试图像,它是机器学习领域最常用的数据集之一。在这个数据集上,我们可以使用多层感知机(MLP)来实现分类任务。下面是一个基于MNIST数据集的MLP代码示例:
```python
import torch
import torch.nn as nn
import torch.optim as optim
import torchvision.datasets as datasets
import torchvision.transforms as transforms
# 定义MLP模型
class MLP(nn.Module):
def __init__(self):
super(MLP, self).__init__()
self.fc1 = nn.Linear(28*28, 512)
self.fc2 = nn.Linear(512, 256)
self.fc3 = nn.Linear(256, 10)
def forward(self, x):
x = x.view(-1, 28*28)
x = nn.functional.relu(self.fc1(x))
x = nn.functional.relu(self.fc2(x))
x = self.fc3(x)
return x
# 加载MNIST数据集
train_dataset = datasets.MNIST(root='./data', train=True, download=True, transform=transforms.ToTensor())
test_dataset = datasets.MNIST(root='./data', train=False, download=True, transform=transforms.ToTensor())
# 定义数据加载器
train_loader = torch.utils.data.DataLoader(dataset=train_dataset, batch_size=100, shuffle=True)
test_loader = torch.utils.data.DataLoader(dataset=test_dataset, batch_size=100, shuffle=False)
# 定义模型、损失函数和优化器
model = MLP()
criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(model.parameters(), lr=0.001)
# 训练模型
for epoch in range(10):
for i, (images, labels) in enumerate(train_loader):
optimizer.zero_grad()
outputs = model(images)
loss = criterion(outputs, labels)
loss.backward()
optimizer.step()
# 在测试集上测试模型性能
correct = 0
total = 0
for images, labels in test_loader:
outputs = model(images)
_, predicted = torch.max(outputs.data, 1)
total += labels.size(0)
correct += (predicted == labels).sum()
accuracy = 100 * correct / total
print('Epoch [{}/{}], Test Accuracy: {:.2f}%'.format(epoch+1, 10, accuracy))
```
在上面的示例中,我们定义了一个包含三个全连接层的MLP模型。在训练过程中,我们使用Adam优化器和交叉熵损失函数。在每个训练周期结束后,我们在测试集上测试模型的性能,并计算测试集上的准确率。在这个示例中,我们训练了10个训练周期,最终的测试集准确率达到了98.39%。
阅读全文