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

news2024/11/24 22:42:28

目录
背影
卷积神经网络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、alexnet,vgg16,resnet等)
% 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等,结合后的神经网络,即可处理大输入数据,又具有无限逼近的能力

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/385465.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux内核4.14版本——drm框架分析(1)——drm简介

目录 1. DRM简介(Direct Rendering Manager) 1.1 DRM发展历史 1.2 DRM架构对比FB架构优势 1.3 DRM图形显示框架 1.4 DRM图形显示框架涉及元素 1.4.1 DRM Framebuffer 1.4.2 CRTC 1.4.3 Encoder 1.4.4 Connector 1.4.5 Bridge 1.4.6 Panel 1.4.…

双指针法将时间复杂度从 O(n^2) 优化到 O(n)

[1] 什么是双指针法 双指针法(Two Pointers)是一种常见的算法技巧,常用于数组和链表等数据结构中。 双指针法的基本思想是维护两个指针,分别指向不同的位置,通过它们的移动来解决问题。在某些情况下,使用双…

【Leetcode】移除链表元素 链表的中间节点 链表中倒数第k个节点

目录 一.【Leetcode203】移除链表元素 1.链接 2.题目再现 A.双指针法 B.类尾删法 C.哨兵位 二.【Leetcode876】链表的中间节点 1.链接:链表的中间节点 2.题目再现 3.解法:快慢指针 三.链表中倒数第k个节点 1.链接:链表中倒数第k个…

LiveGBS国标GB/T28181国标视频流媒体平台-功能报警订阅配置报警预案告警截图及录像

LiveGBS国标GB/T28181国标视频流媒体平台-功能报警订阅配置报警预案告警截图及录像1、报警信息1.1、报警查询1.2、配置开启报警订阅1.2.1、国标设备编辑1.2.2、选择开启报警订阅1.3、配置摄像头报警1.3.1、配置摄像头报警通道ID1.3.2、配置摄像头开启侦测1.3.3、尝试触发摄像头…

企业为什么需要做APP安全评估?

近几年新型信息基础设施建设和移动互联网技术的不断发展,移动APP数量也呈现爆发式增长,进而APP自身的“脆弱性”也日益彰显,这对移动用户的个人信息及财产安全带来巨大威胁和挑战。在此背景下,国家出台了多部法律法规,…

【架构师】跟我一起学架构——微服务分层监控

博客昵称:架构师Cool 最喜欢的座右铭:一以贯之的努力,不得懈怠的人生。 作者简介:一名Coder,软件设计师/鸿蒙高级工程师认证,在备战高级架构师/系统分析师,欢迎关注小弟! 博主小留言…

机器学习与目标检测作业:安装pytorch

机器学习与目标检测作业:安装pytorch一、 进入官网复制下载命令二、 下载的过程2.1 conda命令运行三、 测试pytorch是否安装成功安装pytorch教程 一、 进入官网复制下载命令 进入官网复制下载命令如下图所示 二、 下载的过程 下载的过程如下图所示 2.1 conda命令运…

vue3中引入初始化样式

1、创建一个reset.css文件 2、文件内容为: css charset “utf-8”;html{background-color:#fff;color:#000;font-size:12px} body,ul,ol,dl,dd,h1,h2,h3,h4,h5,h6,figure,form,fieldset,legend,input,textarea,button,p,blockquote,th,td,pre,xmp{margin:0;padding…

华为机试题:HJ100 等差数列(python)

文章目录(1)题目描述(2)Python3实现(3)知识点详解1、input():获取控制台(任意形式)的输入。输出均为字符串类型。1.1、input() 与 list(input()) 的区别、及其相互转换方…

芯驰(E3-gateway)开发板环境搭建以及调试遇到问题的解决

1-Windows下环境配置 可以在Windows上使用命令行或者IAR IDE编译SSDK项目。Windows编译依赖的工具已经包含在 prebuilts/windows 目录中,包括编译器、Python和命令行工具。 1.1.1 CMD SSDK集成 msys 工具,可以在Windows命令行中完成SDK的配置、编译和…

零入门kubernetes网络实战-19->golang编程netlink包方式操作tun设备

《零入门kubernetes网络实战》视频专栏地址 https://www.ixigua.com/7193641905282875942 本篇文章视频地址(稍后上传) 本篇文章介绍一下,使用 github.com/vishvananda/netlink 来操作tun设备 1、安装github.com/vishvananda/netlink go get github.com/vishvanan…

Java的Groovy执行器内存泄露(MetaSpace)问题分析与解决办法

环境与背景 在java程序中通过GroovyScriptEvaluator执行器创建脚本Script对象调用Groovy脚本语言来完成某些功能, ,会通过AppClassLoader或者GroovyClassLoader去生产一个随机的名称的Groovy的Script类对象,导致元数据,产生的class类会被AppClassLoader或者GroovyClassLoader内…

软件测试必备知识

一、软件测试的基本概念①需求IEEE规定:软件需求是(1)用户解决问题或达到目标所需 条件或权能。(2)系统或系统部件要满足合同、标准、规范或其他正式规定文档所需具有的条件或权能。一种反应上面(1&#xf…

MyBatisPlus 批量添加

文章目录现状优化效果现状 一般来说,批量插入可以使用 MyBatisPlus 中 ServiceImpl 自带的方法 saveBatch 打开 sql 日志,application.yml 添加配置,mapper-locations 配置 mapper 路径 mybatis-plus:configuration:log-impl: org.apache.i…

LEAP模型的能源环境发展、碳排放建模预测及不确定性分析

LEAP(Long Range Energy Alternatives Planning System/ Low emission analysis platform,长期能源可替代规划模型)是一种自下而上的能源-环境核算工具,由斯德哥尔摩环境研究所和美国波士顿大学联合研发。该模型与情景分析法紧密结…

基于Jetson Tx2 Nx的Qt、树莓派等ARM64架构的Ptorch及torchvision的安装

前提 已经安装好了python、pip及最基本的依赖库 若未安装好点击python及pip安装请参考这篇博文 https://blog.csdn.net/m0_51683386/article/details/129320492?spm1001.2014.3001.5502 特别提醒 一定要先根据自己板子情况,找好python、torch、torchvision的安…

信箱|邮箱系统

技术:Java、JSP等摘要:在经济全球化和信息技术飞速发展的今天,通过邮件收发进行信息传递已经成为主流。目前,基于B/S(Browser/Server)模式的MIS(Management information system)日益…

C语言数组二维数组

C 语言支持数组数据结构,它可以存储一个固定大小的相同类型元素的顺序集合。数组是用来存储一系列数据,但它往往被认为是一系列相同类型的变量。 数组的声明并不是声明一个个单独的变量,比如 runoob0、runoob1、…、runoob99,而是…

唤醒手腕前端 Electron Gui 桌面应用开发详细教程(流程模型、进程通信、进程沙盒化)

流程模型 Electron 继承了来自 Chromium 的多进程架构,这使得此框架在架构上非常相似于一个现代的网页浏览器。 为什么不是一个单一的进程? 网页浏览器是个极其复杂的应用程序。 除了显示网页内容的主要能力之外,他们还有许多次要的职责&a…

红黑树(Insert())

文章目录红黑树代码红黑树性质红黑树vsAVL树红黑树的实现Insert()情况一:如果我插入的新节点时红色的情况二:叔叔是黑色或者不存在情况三: cur红,p为红,g为黑,u不存在或者为黑-双旋检查erase()红黑树vsAVL树红黑树的应用:红黑树 二叉搜索树 …