基于CNN-SVM/LSSVM的手写数字图像识别,MNIST数据集,MALAB代码实现

今天出一期基于CNN-SVM/LSSVM的手写数字识别。流程大致如下:

①采用CNN对MNIST数据集进行分类;

②采用CNN提取MNIST手写数字图片特征,然后采用SVM对提取到的特征进行分类;

③采用CNN提取MNIST手写数字图片特征,然后采用LSSVM对提取到的特征进行分类;

一、MNIST数据集简介

关于MNIST数据集在很多图像识别的论文中都会用到,是一个很经典的数据集。MNIST手写数据集包含70000个样本,每个样本为28×28像素的灰度图片,其中训练集有60000张图片,测试集有10000张。MNIST数据集下载地址是http://yann.lecun.com/exdb/mnist/,包含了4 个部分:

训练集:train-images-idx3-ubyte.gz (9.45 MB,包含60,000个样本)。

训练集标签:train-labels-idx1-ubyte.gz(28.2 KB,包含60,000个标签)。

测试集:t10k-images-idx3-ubyte.gz(1.57 MB ,包含10,000个样本)。

测试集标签:t10k-labels-idx1-ubyte.gz(4.43 KB,包含10,000个样本的标签)。

采用matlab代码处理MNIST数据集如下:

makefile 复制代码
clear all;
close all;
clear
%% %% 原始数据有6万个训练集和1万个测试集,由于要对SVM进行优化,当数据太大时,
% 程序跑起来会很慢,因此随机抽取一些数据即可验证方法准确性
% 选取6000个训练集,和1000个测试集
N_sample = 6000;
N_test=1000;
XTrain = zeros(28,28,1,N_sample);
YTrain=zeros(N_sample,1);


fidimg1=fopen('train-images.idx3-ubyte','rb');
fidimg2=fopen('train-labels.idx1-ubyte','rb');      


[img,count]=fread(fidimg1,16);   % table head
[imgInd,count1]=fread(fidimg2,8);   %table head
for k=1:N_sample    
    [im,~]=fread(fidimg1,[28,28]);
    ind=fread(fidimg2,1);
    XTrain(:,:,1,k)=im';
    YTrain(k)=ind;
end
fclose(fidimg1);
fclose(fidimg2);
YTrain=categorical(YTrain);


XTest = zeros(28,28,1,N_test);
YTest=zeros(N_test,1);
fidimg1=fopen('t10k-images.idx3-ubyte','rb');
fidimg2=fopen('t10k-labels.idx1-ubyte','rb');


[img,count]=fread(fidimg1,16);
[imgInd,count1]=fread(fidimg2,8);
for k=1:N_test    
    [im,~]=fread(fidimg1,[28,28]);
    ind=fread(fidimg2,1);
    XTest(:,:,1,k)=im';
    YTest(k)=ind;
end
fclose(fidimg1);
fclose(fidimg2);
YTest=categorical(YTest);


%% 图片可视化
% ........................图片可视化........................
%注意,原始样本训练集有6万个,这里只取前60个
for i = 1:60
    img = XTrain(:,:,1,i);
    subplot(6,10,i)
    image(img);
    ax=gca;
    ax.XAxis.Visible='off';
    ax.YAxis.Visible='off';
end

上述代码实现了对MINIST数据集的训练集与测试集划分,并选取部分图片进行可视化,可视化结果如下:

二、CNN分类结果

三、CNN-SVM分类结果

四、CNN-LSSVM分类结果

五、代码目录

以上提到的所有图片,代码均可运行出来。

代码获取

复制链接跳转:https://mbd.pub/o/bread/ZZibmZ5t

或者点击下方阅读原文跳转链接,

相关推荐
爱吃生蚝的于勒39 分钟前
C语言内存函数
c语言·开发语言·数据结构·c++·学习·算法
HyperAI超神经2 小时前
【TVM 教程】使用 Tensorize 来利用硬件内联函数
人工智能·深度学习·自然语言处理·tvm·计算机技术·编程开发·编译框架
扫地的小何尚3 小时前
NVIDIA RTX 系统上使用 llama.cpp 加速 LLM
人工智能·aigc·llama·gpu·nvidia·cuda·英伟达
埃菲尔铁塔_CV算法6 小时前
深度学习神经网络创新点方向
人工智能·深度学习·神经网络
ChoSeitaku6 小时前
链表循环及差集相关算法题|判断循环双链表是否对称|两循环单链表合并成循环链表|使双向循环链表有序|单循环链表改双向循环链表|两链表的差集(C)
c语言·算法·链表
Fuxiao___6 小时前
不使用递归的决策树生成算法
算法
艾思科蓝-何老师【H8053】6 小时前
【ACM出版】第四届信号处理与通信技术国际学术会议(SPCT 2024)
人工智能·信号处理·论文发表·香港中文大学
我爱工作&工作love我6 小时前
1435:【例题3】曲线 一本通 代替三分
c++·算法
秀儿还能再秀6 小时前
机器学习——简单线性回归、逻辑回归
笔记·python·学习·机器学习
weixin_452600696 小时前
《青牛科技 GC6125:驱动芯片中的璀璨之星,点亮 IPcamera 和云台控制(替代 BU24025/ROHM)》
人工智能·科技·单片机·嵌入式硬件·新能源充电桩·智能充电枪