基于卷积神经网络的手写数字识别MATLAB实现
时间: 2023-08-24 13:10:06 浏览: 121
手写数字识别是计算机视觉领域中的一个重要应用,它可以广泛应用于自动化识别、物联网智能监控、人机交互等方面。本文介绍基于卷积神经网络(Convolutional Neural Network, CNN)的手写数字识别MATLAB实现。
1. 数据集准备
我们使用的是MNIST手写数字数据集,它包含了60000张训练图像和10000张测试图像。我们需要将这些图像转换为MATLAB可读取的形式。可以通过以下代码实现:
```matlab
% 加载MNIST数据集
train_images = loadMNISTImages('train-images-idx3-ubyte'); % 60000x784 double
train_labels = loadMNISTLabels('train-labels-idx1-ubyte'); % 60000x1 double
test_images = loadMNISTImages('t10k-images-idx3-ubyte'); % 10000x784 double
test_labels = loadMNISTLabels('t10k-labels-idx1-ubyte'); % 10000x1 double
% 将图像数据reshape为28x28的矩阵
train_images = reshape(train_images, [28, 28, 1, 60000]);
test_images = reshape(test_images, [28, 28, 1, 10000]);
```
2. CNN模型构建
我们使用MATLAB自带的Deep Learning Toolbox构建CNN模型。以下是一个简单的CNN模型示例:
```matlab
layers = [
imageInputLayer([28 28 1]) % 输入层,28x28x1图像
convolution2dLayer(5, 20) % 卷积层,5x5核,20个输出通道
reluLayer % 非线性激活函数
maxPooling2dLayer(2, 'Stride', 2) % 池化层,2x2最大池化,步长为2
fullyConnectedLayer(10) % 全连接层,10个神经元输出
softmaxLayer % Softmax激活函数
classificationLayer % 分类层
];
```
3. 模型训练与测试
我们使用MATLAB自带的trainNetwork函数进行模型训练,并使用测试集对模型进行评估。以下是训练和测试代码示例:
```matlab
% 设置训练选项
options = trainingOptions('sgdm', ...
'MaxEpochs', 10, ...
'InitialLearnRate', 0.001, ...
'Verbose', false, ...
'Plots', 'training-progress');
% 训练模型
net = trainNetwork(train_images, categorical(train_labels), layers, options);
% 使用测试集评估模型
pred_labels = classify(net, test_images);
accuracy = sum(pred_labels == categorical(test_labels)) / numel(test_labels);
fprintf('Test accuracy: %.2f%%\n', accuracy * 100);
```
经过10个epoch的训练,模型在测试集上取得了大约98%的准确率。
4. 结论
本文介绍了基于卷积神经网络的手写数字识别MATLAB实现,包括数据集准备、模型构建、训练和测试。读者可以基于这个示例代码深入学习CNN模型及其应用。