基于卷积神经网络CNN的分类研究,基于卷积神经网络的手写体识别
目录
背影
卷积神经网络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 : numbatchesbatch_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;endnet.rL(end + 1) = 0.85 * net.rL(end) + 0.15 * net.L;endtoc;
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等,结合后的神经网络,即可处理大输入数据,又具有无限逼近的能力
相关文章:
基于卷积神经网络CNN的分类研究,基于卷积神经网络的手写体识别
目录 背影 卷积神经网络CNN的原理 卷积神经网络CNN的定义 卷积神经网络CNN的神经元 卷积神经网络CNN的激活函数 卷积神经网络CNN的传递函数 卷积神经网络CNN手写体识别 基本结构 主要参数 MATALB代码 结果图 展望 背影 现在生活,各种人工智能都要求对图像拥有识别…...
mybatis的增删改查运用
目录 一、总览图 二、运用 一、总览图 代码总览图 数据库总览图 二、运用 数据库的一张表对应一个封装类,一个mapper接口,一个mapper.xml文件, 一个实现类。表中的增删改查都在里面编写 但是配置xml文件整个数据库只要一个就好了 1.…...
centos8安装docker运行java文件
本文由个人总结,如需转载使用请标明原著及原文地址 这里是基于我前一篇搭的centos8服务器做的,如果yum baseos源或appstream源有问题可以去看看前一篇 https://blog.csdn.net/qq_36911145/article/details/129263830 1.安装docker 1.1配置docker yum…...
Docker容器化部署.net core API
1.为API集成Docker环境。(VS自带,傻瓜式操作) 1.1 点击项目,右键,添加,选择Docker支持 1.2 找到项目根目录中的Dockerfile文件,这是VS刚刚帮我们自动生成的。进入和做如图标红地方修改。 把文…...
springcloud 服务调用feign、熔断hystrix、网关gateway
回归cloud的学习,对于springcloud的架构与原理以及性能的分析我们都在之前的文章里写过:springcloud架构的认识我们之前测试过eureka服务注册功能,它能很好的保存服务之间的通讯关系,是维系微服务通讯网之间的电话本,同…...
《C++ Primer》 第十二章 动态内存
《C Primer》 第十二章 动态内存 动态内存与智能指针 shared_ptr允许多个指针指向同一个对象;unique_ptr则“独占”所指向的对象,weak_ptr指向shared_ptr所管理的对象。这三种类型都定义在memory头文件中。 shared_ptr类:默认初始化的智能…...
多个关键字用or、and、包含、不包含动态拼接为正则表达式和SQL查询条件
目录前言校验思路1、存储方式2、实现图一实现图二实现结果最后前言 不知道大家有没有做过这种需求:在某字符串中,根据多个关键字去判断这串字符串是否满足条件。如下图: 亦或是 如果说要根据图二的关键字去数据库中查询符合条件的数据&a…...
初始Linux操作系统
个人简介:云计算网络运维专业人员,了解运维知识,掌握TCP/IP协议,每天分享网络运维知识与技能。座右铭:海不辞水,故能成其大;山不辞石,故能成其高。个人主页:小李会科技的…...
【算法数据结构体系篇class12、13】:二叉树
一、判断二叉树是否是完全二叉树/*** 判断二叉树是否是完全二叉树** //判断层序遍历过程如果节点有右子树 没有左子树 那么就不是完全二叉树* //判断层序遍历过程如果遇到第一个节点是没有左或右子树的,也就是只有一个子节点或者没有,那么再往后层序遍历…...
数字IC手撕代码--联发科(总线访问仲裁)
题目描述当A、B两组的信号请求访问某个模块时,为了保证正确的访问,需要对这些信号进行仲裁。请用Verilog实现一个仲裁器,对两组请求信号进行仲后,要求:协议如图所示,请求方发送req(request&…...
白盒测试复习重点
白盒测试白盒测试之逻辑覆盖法逻辑覆盖用例设计方法1.语句覆盖2.判定覆盖(分支覆盖)3.条件覆盖4.判定条件覆盖5.条件组合覆盖6.路径覆盖白盒测试之基本路径测试法基本路径测试方法的步骤1.根据程序流程图画控制流图2.计算圈复杂度3.导出测试用例4.准备测试用例5.例题白盒测试总…...
学习C++这几个网站足矣
文章目录cppreferencecplusplusquick-bench[C 之父的网站](https://www.stroustrup.com/bs_faq.html)C提案[Cpp Core Guidelines](http://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines)[C Super-FAQ](https://isocpp.org/faq)[learn c](https://www.learncpp.com/)[A…...
第十四届蓝桥杯模拟赛(第三期)——C语言版
1.找最小数 问题描述: 请找到一个大于 2022 的最小数,这个数转换成十六进制之后,所有的数位(不含前导 0)都为字母(A 到 F)。 请将这个数的十进制形式作为答案提交。 #include <stdio.h> int main(…...
Flutter Button 实例
大家好,我是 17。 在上篇文章 使用 Flutter Button 介绍了如何修改 button 的样式,本文来具体实践一下。 本文列举一些常用的 button 效果,以便在用到的时候方便使用。因为 ElevatedButton 最常用,所以大多以 ElevatedButton 举…...
好玩的docker项目,盒子刷的海思nas,挂载外接硬盘。qb种子
玩法思路(5条消息) 群晖qb下载,tr辅种_屿兮的博客-CSDN博客_群晖辅种qbittorrent简介及设置_哔哩哔哩_bilibiliqb下载器下载Transmission最好用的BT(PT)下载神器/超简单上手教你在NAS轻松部署/告别简陋三步让你升级全中文最新Web界面(BT下载/PT下载/NAS/…...
RabbitMQ的使用
1.初识MQ1.1.同步和异步通讯微服务间通讯有同步和异步两种方式:同步通讯:就像打电话,需要实时响应。异步通讯:就像发邮件,不需要马上回复。两种方式各有优劣,打电话可以立即得到响应,但是你却不…...
Selenium如何隐藏浏览器页面?
Selenium隐藏浏览器页面 背景 在工作,学习中,我们常常会使用selenium来获取网页上的数据,编完完整程序之后,实现真正意义上的自动化获取,此时我们会发现在运行中往往会弹出浏览器页面,在调试过程中&…...
基于Ant DesignPro Vue实现通过SpringBoot后台加载自定义菜单- 前后端分离
基于Ant DesignPro Vue实现通过SpringBoot后台加载自定义菜单- 前后端分离 本文想基于Ant DesignPro Vue构建的前端SpringBoot实现的后端接口服务,实现前后端分离开发和独立运行,业务场景是登录认证,认证成功后返回该用户相应权限范围内可见的…...
Acwing---843. n-皇后问题
n-皇后问题1.题目2.基本思想3.代码实现1.题目 n−皇后问题是指将 n 个皇后放在 nn 的国际象棋棋盘上,使得皇后不能相互攻击到,即任意两个皇后都不能处于同一行、同一列或同一斜线上。 现在给定整数 n,请你输出所有的满足条件的棋子摆法。 …...
彻底搞清楚内存泄漏的原因,如何避免内存泄漏,如何定位内存泄漏
作为C/C开发人员,内存泄漏是最容易遇到的问题之一,这是由C/C语言的特性引起的。C/C语言与其他语言不同,需要开发者去申请和释放内存,即需要开发者去管理内存,如果内存使用不当,就容易造成段错误(segment fa…...
自动驾驶目标检测项目实战——基于深度学习框架yolov的交通标志检测
自动驾驶目标检测项目实战——基于深度学习框架yolov的交通标志检测 目前目标检测算法有很多,流行的就有faster-rnn和yolov,本文使用了几年前的yolov3框架进行训练,效果还是很好,当然也可以使用更高版本的Yolov进行实战。本代码使…...
flink兼容性验证
flink介绍:https://blog.csdn.net/weixin_43563705/article/details/107604693 一、安装启动 安装flink及其依赖 yum install java-1.8.0-openjdk curl tar mkdir -p /usr/local/flink wget https://mirrors.aliyun.com/apache/flink/flink-1.16.1/flink-1.16.1-bi…...
智慧工厂数字孪生可视化监测系统有效提升厂区安全管控效力
我国制造业正处于产业升级的关键时期,基于数据进行生产策略制定与管理是大势所趋,而数据可视化以更直观的方式成为数据分析传递信息的重要工具。 深圳华锐视点通过三维可视化手段对工厂各类设备进行三维建模,真实复现设备设施外观、结构、运转…...
c++中基本类型详细解释外加基本运算规则
👀👀#c中包括算数类型和空类型。 类型含义wchat_t宽字符bool布尔类型char字符chat16_tunicode字符chat_32unicode字符short短整型int整形long长整型longlong长整型float单精度浮点型double双精度浮点型longdouble扩展精度浮点型 👀…...
扬帆优配“机器人+”方案加码产业发展,这些股有望高增长
“机器人”发明新需求,2022年中国机器人市场规模约为174亿美元。 美国时刻3月1日,特斯拉在得克萨斯州超级工厂举办投资者日活动,展示了人形机器人Optimus的视频,更夸大的是,视频中的机器人好像在制作另一个机器人&…...
推送投票制作微信推送里投票制作教程在线投票活动制作
近些年来,第三方的微信投票制作平台如雨后春笋般络绎不绝。随着手机的互联网的发展及微信开放平台各项基于手机能力的开放,更多人选择微信投票小程序平台,因为它有非常大的优势。1.它比起微信公众号自带的投票系统、传统的H5投票系统有可以图…...
【架构师】跟我一起学架构——微服务分层监控
博客昵称:架构师Cool 最喜欢的座右铭:一以贯之的努力,不得懈怠的人生。 作者简介:一名Coder,软件设计师/鸿蒙高级工程师认证,在备战高级架构师/系统分析师,欢迎关注小弟! 博主小留言…...
Linux:https静态网站搭建案例
目录介绍httpshttps通信过程例介绍https 整个实验是在http实验基础上进行的 因为http协议在传输的时候采用的是明文传输,有安全隐患,所以出现了https(安全套接字层超文本传输协议) HTTPS并不是一个新协议, 而是HTTP…...
前端css整理
如何水平垂直居中一个盒子? 1.已知高度:子盒子设置 display: inline-block; 父盒子设置 line-height 等于高度实现垂直居中;使用 text-align:center实现水平居中 2.父盒子 display:flex; align-items:center;justify-content:center; 3.定位&…...
混凝土搅拌站远程监控解决方案
一、项目背景 随着大规模的基础设施建设,对混凝土搅拌设备的需求量日益增加,对其技术指标的要求也日益提高,其技术性能将直接关系到工程的质量和使用寿命。而混凝土生产的质量是在生产过程中形成的,而非最终强度的检测。混凝土生…...
做网站的专业叫啥/关键词优化seo排名
一、约束条件约束类型关键字默认约束default 值非空约束not null唯一约束unique key自增长约束auto_increment主键约束primary key外键约束foreign key1.1 默认约束(default 默认值)初始值设置,插入记录时,如果没有明确为字段赋值,则自动赋予…...
上海徐汇网站建设/核心关键词和长尾关键词举例
不知道在朋友们使用触发器,如果你已经对触发器很了解了,那么请跳过此文,如果你还没有使用过触发器的话,那就让我们来认识一下吧。QUOTE:定义: 触发器是一种特殊类型的存储过程,不由用户直接调用。当使用…...
网站不用工具开发建设/百度培训
题解 加长版的01背包,只需要对主件处理: 如果没有附件:1.只取主件 如果有一个附件:1.只取主件 2.取主件和附件 如果有两个附件:1.只取主件 2.取主件和附件1 3.取主件和附件2 4.取主件和两个附件 然后就好做了。 …...
godaddy如何创建网站/最大免费广告发布平台
选课系统6. 创建数据库创建数据库设置编码为UTF8CREATE DATABASE choose CHARSET utf8;6.1 创建班级表表名:classes字段:class_no 整型 自增长 主键 -- 班级编号class_name char(20) 非空 唯一 -- 班级名称department_name char(20) 非空 -- 院系名称create tableclasses(cl…...
微信导购网站怎么做视频教学/磁力搜索
OSI model(open system interconnection)存在的原因: 网络模型建立是为了是网络的建造者可以建造出可以相互交流和一起工作的网络,并且描述了从一个电脑上通过网络传数据到另一个网络。 1.physical层 定义了对终端系统之间的连接的…...
小程序雀神麻将开挂视频/seo兼职
今天有网友对pf的in out 和后面的 a to b 范迷糊,然后举了个例子让他明白假设防火墙是一个学校的门卫室,它是校门与学校里面的教室必经之路, 一个门通向校门外叫$ext_if,另一个门通向学校的教室 $int_if ,把自己想像成…...