基于卷积神经网络CNN的分类研究,基于卷积神经网络的手写体识别

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

目录
背影
卷积神经网络CNN的原理
卷积神经网络CNN的定义
卷积神经网络CNN的神经元
卷积神经网络CNN的激活函数
卷积神经网络CNN的传递函数
卷积神经网络CNN手写体识别
基本结构
主要参数
MATALB代码
结果图
展望

背影

现在生活各种人工智能都要求对图像拥有识别的能力本文主要做卷积神经网络CNN进行手写体分类识别通过调试参数提高识别率。

卷积神经网络CNN的原理

卷积神经网络CNN的定义

在这里插入图片描述

卷积神经网络Convolutional Neural Networks, CNN是一类包含卷积计算且具有深度结构的前馈神经网络Feedforward Neural Networks是深度学习deep learning的代表算法之一 。卷积神经网络具有表征学习representation learning能力能够按其阶层结构对输入信息进行平移不变分类shift-invariant classification因此也被称为“平移不变人工神经网络Shift-Invariant Artificial Neural Networks, SIANN”

卷积神经网络CNN的基本结构

基本BP算法包括信号的前向传播和误差的反向传播两个过程。即计算误差输出时按从输入到输出的方向进行而调整权值和阈值则从输出到输入的方向进行。正向传播时输入信号通过隐含层作用于输出节点经过非线性变换产生输出信号若实际输出与期望输出不相符则转入误差的反向传播过程。误差反传是将输出误差通过隐含层向输入层逐层反传并将误差分摊给各层所有单元以从各层获得的误差信号作为调整各单元权值的依据。通过调整输入节点与隐层节点的联接强度和隐层节点与输出节点的联接强度以及阈值使误差沿梯度方向下降经过反复学习训练确定与最小误差相对应的网络参数(权值和阈值)训练即告停止。此时经过训练的神经网络即能对类似样本的输入信息自行处理输出误差最小的经过非线形转换的信息。

输入层

卷积神经网络的输入层可以处理多维数据常见地一维卷积神经网络的输入层接收一维或二维数组其中一维数组通常为时间或频谱采样二维数组可能包含多个通道二维卷积神经网络的输入层接收二维或三维数组三维卷积神经网络的输入层接收四维数组 。由于卷积神经网络在计算机视觉领域应用较广因此许多研究在介绍其结构时预先假设了三维输入数据即平面上的二维像素点和RGB通道。
与其它神经网络算法类似由于使用梯度下降算法进行学习卷积神经网络的输入特征需要进行标准化处理。具体地在将学习数据输入卷积神经网络前需在通道或时间/频率维对输入数据进行归一化若输入数据为像素也可将分布于 的原始像素值归一化至 区间 。输入特征的标准化有利于提升卷积神经网络的学习效率和表现。

隐含层

卷积神经网络的隐含层包含卷积层、池化层和全连接层3类常见构筑在一些更为现代的算法中可能有Inception模块、残差块residual block等复杂构筑。在常见构筑中卷积层和池化层为卷积神经网络特有。卷积层中的卷积核包含权重系数而池化层不包含权重系数因此在文献中池化层可能不被认为是独立的层。以LeNet-5为例3类常见构筑在隐含层中的顺序通常为输入-卷积层-池化层-全连接层-输出。

卷积层

卷积层的功能是对输入数据进行特征提取其内部包含多个卷积核组成卷积核的每个元素都对应一个权重系数和一个偏差量bias vector类似于一个前馈神经网络的神经元neuron。卷积层内每个神经元都与前一层中位置接近的区域的多个神经元相连区域的大小取决于卷积核的大小在文献中被称为“感受野receptive field”其含义可类比视觉皮层细胞的感受野 。卷积核在工作时会有规律地扫过输入特征在感受野内对输入特征做矩阵元素乘法求和并叠加偏差量

池化层pooling layer
在卷积层进行特征提取后输出的特征图会被传递至池化层进行特征选择和信息过滤。池化层包含预设定的池化函数其功能是将特征图中单个点的结果替换为其相邻区域的特征图统计量。池化层选取池化区域与卷积核扫描特征图步骤相同由池化大小、步长和填充控制

全连接层fully-connected layer
卷积神经网络中的全连接层等价于传统前馈神经网络中的隐含层。全连接层位于卷积神经网络隐含层的最后部分并只向其它全连接层传递信号。特征图在全连接层中会失去空间拓扑结构被展开为向量并通过激励函数

输出层
卷积神经网络中输出层的上游通常是全连接层因此其结构和工作原理与传统前馈神经网络中的输出层相同。对于图像分类问题输出层使用逻辑函数或归一化指数函数softmax function输出分类标签 。在物体识别object detection问题中输出层可设计为输出物体的中心坐标、大小和分类 。在图像语义分割中输出层直接输出每个像素的分类结果

基于卷积神经网络CNN的手写体识别

基本模型

创建经典的Lenet,三层神经网络

神经网络参数

卷积核33池化层22学习率0.5训练批次20最大迭代次数200

MATLAB编程代码

clear
clc
close all
% format compact
%% 加载数据
load maydata.mat
% load MNISTdata.match
% ann_data
[input,inputps]=mapminmax(ann_data,-1,1);
[output,outputps]=mapminmax(ann_label,0,1);

% [input,inputps]=mapminmax(ann_data,0,1);
% [output,outputps]=mapminmax(ann_label,0,1);

%%
input1=input’;%
input = [input1 input1(:,10)];

%%
for i=1:size(input,1)
x=reshape(input(i,:),6,6);
input_x(:,:,i)=x;
end

%%
n = randperm(5000);
train_x=input_x(:,:,n);
train_y=output(:,n);

test_x=input_x(:,:,n(4501:5000));
test_y=output(:,n(4501:5000));

%% 创建一个经典Lenet卷积神经网络中代表模型如lenet、alexnetvgg16resnet等
% rand(‘state’,0)
cnn.layers = {
%第一层
struct(‘type’, ‘i’) %输入层
%第二层
struct(‘type’, ‘c’, ‘outputmaps’, 9, ‘kernelsize’, 3) %卷积层–相当于隐含层节点为9
% 卷积后的图像大小为(4-3+1)(4-3+1)=22
struct(‘type’, ‘s’, ‘scale’, 2) %池化层 利用一个22的池化层把卷积后的图像降维原来的一半
% (2/2)
(2/2)=1*1
};
%% 训练 CNN
% 参数设置
opts.alpha = 0.5;% 学习率
opts.batchsize = 20; %批训练大小 batchsize整数倍必须是总训练样本大小选择更小的批数据 这样计算的更快电脑所需内存也会大幅减小
opts.numepochs = 200;%学习迭代次数

cnn = cnnsetup(cnn, train_x, train_y);
cnn = cnntrain(cnn, train_x, train_y, opts);
% % 训练误差曲线
figure
plot(cnn.rL)
xlabel(‘训练次数次数’)
ylabel(‘误差’)
title(‘训练误差曲线’)

%% 测试模型有效性
% load net_cnn
% 训练集
% [er1, bad1 , a1, h1] = cnntest(cnn, train_x, train_y);
% h1=(mapminmax(‘reverse’,h1,outputps));
% a1=(mapminmax(‘reverse’,a1,outputps));
% disp(‘展示CNN训练集精度’)
% figure
% plot(h1,‘r-o’)
% hold on
% plot(a1,‘k–')
% legend(‘预测输出’,‘期望输出’)
% xlabel(‘样本数/个’)
% ylabel(‘标签类别’)
% title(‘CNN网络输出与期望输出对比–训练集’)
% 测试集
[er2, bad2 , a2, h2] = cnntest(cnn, test_x, test_y);
% disp(‘展示CNN测试集精度’)
[~,h2]=max(mapminmax(‘reverse’,h2,outputps));
[~,a2]=max(mapminmax(‘reverse’,a2,outputps));
[a2,mx] = sort(a2);
h2 = h2(mx);
figure
plot(a2(1,:),'r-
’)
hold on
plot(h2(1,:),‘b-o’)
hold off
legend(‘期望输出’,‘预测输出’)
xlabel(‘样本’)
ylabel(‘PPX’)
title(‘CNN网络输出与期望输出对比–测试集’)

figure
plot(er2(1,:),‘k-*’)
ylabel(‘PPX误差’)

zhunquelv = sum(a2==h2)/length(h2)

function net = cnntrain(net, x, y, opts)
m = size(x, 3);
numbatches = m / opts.batchsize;
if rem(numbatches, 1) ~= 0
error(‘numbatches not integer’);
end
net.rL = [];
for i = 1 : opts.numepochs

    disp(['epoch ' num2str(i) '/' num2str(opts.numepochs)]);
    tic;
    kk = randperm(m);
    for l = 1 : numbatches
        batch_x = x(:, :, kk((l - 1) * opts.batchsize + 1 : l * opts.batchsize));
        batch_y = y(:,    kk((l - 1) * opts.batchsize + 1 : l * opts.batchsize));

        net = cnnff(net, batch_x);
        net = cnnbp(net, batch_y);
        net = cnnapplygrads(net, opts);
        if isempty(net.rL)
            net.rL(1) = net.L;
        end
        net.rL(end + 1) = 0.85 * net.rL(end) + 0.15 * net.L;
    end
    toc;
end

end

function [er, aa, h,y] = cnntest(net, x, y1)%,outputps,outputps
% feedforward
an = cnnff(net, x);
% h = mapminmax(‘reverse’,an.o,outputps);
% y = mapminmax(‘reverse’,y1,outputps);
h = an.o;
y = y1;
er = h-y;
aa = sum(sum(abs(er./h)))/(size(er,1)*size(er,2));

end

效果图

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

结果分析

从效果图上看CNN卷积神经网络分类准确率可达到百分子80以上。

展望

CNN是一种深度信念网络优点在可以处理大输入数据能训练中自动降维训练的过程就是降维的过程缺点是拟合逼近能力不强收敛面比较平滑基于这些可以和其他拟合能力强的神经网络结合比如极限学习机RBF等结合后的神经网络即可处理大输入数据又具有无限逼近的能力

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6