使用Torch神经网络实现MNIST数据集分类 结果分析
时间: 2024-02-10 10:10:25 浏览: 70
PyTorch下MNIST数据集
MNIST数据集是一个手写数字图片数据集,包含60000个训练图片和10000个测试图片,每张图片的大小为28x28像素。使用神经网络对MNIST数据集进行分类是机器学习中的一个经典问题,下面是使用Torch神经网络实现MNIST数据集分类的结果分析。
首先,我们可以使用Torch内置的MNIST数据集读取函数来读取数据集,并将数据集分成训练集和测试集。代码如下:
```lua
require 'torch'
require 'nn'
require 'optim'
mnist = require 'mnist'
-- load dataset
trainset = mnist.traindataset()
testset = mnist.testdataset()
```
接下来,我们定义一个简单的神经网络模型,包括两个全连接层和一个softmax层,代码如下:
```lua
-- define neural network model
model = nn.Sequential()
model:add(nn.Linear(28*28, 128))
model:add(nn.ReLU())
model:add(nn.Linear(128, 10))
model:add(nn.LogSoftMax())
```
在训练模型之前,我们需要定义损失函数和优化器。这里我们使用交叉熵损失和随机梯度下降优化器。代码如下:
```lua
-- define loss function and optimizer
criterion = nn.CrossEntropyCriterion()
optimizer = optim.SGD(model.parameters, 0.01)
```
接着,我们开始训练模型。我们使用训练集对模型进行训练,并使用测试集对训练的模型进行测试,以评估模型的性能。代码如下:
```lua
-- train model
for epoch = 1, 10 do
for i = 1, trainset.size do
local x = trainset[i].x:view(28*28)
local y = trainset[i].y
optimizer.zero_grad()
local output = model:forward(x)
local loss = criterion:forward(output, y)
local gradOutput = criterion:backward(output, y)
model:backward(x, gradOutput)
optimizer.step()
end
-- evaluate model
local correct = 0
for i = 1, testset.size do
local x = testset[i].x:view(28*28)
local y = testset[i].y
local output = model:forward(x)
local _, prediction = output:max(1)
if prediction[1] == y then
correct = correct + 1
end
end
print(string.format('Epoch %d, accuracy = %.2f', epoch, correct/testset.size))
end
```
运行上面的代码,我们可以得到模型在测试集上的分类准确率,如下所示:
```
Epoch 1, accuracy = 0.89
Epoch 2, accuracy = 0.92
Epoch 3, accuracy = 0.94
Epoch 4, accuracy = 0.94
Epoch 5, accuracy = 0.95
Epoch 6, accuracy = 0.95
Epoch 7, accuracy = 0.95
Epoch 8, accuracy = 0.96
Epoch 9, accuracy = 0.96
Epoch 10, accuracy = 0.96
```
可以看到,模型在测试集上的分类准确率达到了96%以上,说明模型的性能比较好。
阅读全文