用C语言构建一个数字识别卷积神经网络

8d858f7f97e348979ddd766b6fc45a7f.jpeg

 卷积神经网络的具体原理和对应的python例子参见末尾的参考资料2.3.

这里仅叙述卷积神经网络的配置, 其余部分不做赘述,构建和训练神经网络的具体步骤请参见上一篇: 用C语言构建一个手写数字识别神经网路

卷积网络同样采用简单的三层结构,包括输入层conv_layer,中间层maxpool_layer, 和输出层output_layer, 其中输出层为全连接层.

 Input(28*28) |>>> CONV3X3 (26x26x8_out)  >>>|<<< MAXPOOL2X2 (13x13x8_out) >>>|<<< NVCELLs (10_out) >>>|

输入层conv_layer:  

为3x3的卷积层, 默认8个卷积核, 采用valid_padding(不填充),移动扫描步长为1,不考虑偏置项. 需要通过训练来确定各个卷积核参数. 3x3的卷积核相比5x5和7x7的卷积核其参数量更少,非线性度更高,同时可以提取更小的特征. (5x5和7x7的卷积可以用多层3x3卷积来表示, 当然,随着层数的增加可能会产生新的问题.) 卷积层的输入部分就是灰度值表示的28x28的手写数字图像,这里也预先进行了归一化处理,即除以255.0.
每个核对28x28数据进行卷积运算后输出26x26个数值. 每个卷积核只需要学习9个参数, 8个卷积核一共是72个参数. 如果是用20个全连接的神经元作为输入层的话,一共需要学习(28x28+1)x20=15700个参数.

中间层maxpool_layer:  

采用2x2最大池化,步长也为2, 池化层没有参数, 不需要学习.MAXPOOL具有防止过拟合的作用,因其仅对最大值对应的节点进行反向传导,相当于断开了与其他节点的连接.在这里maxpool直接将conv_layer每个核的输出26x26下采样到13x13.

输出层output_layer:

 一共10个神经元,分别对应0~9数字的可能性,与中间层的输出进行全连接,这里中间层的输出数据已展平成一维.假定中间层的输出是13x13x8, 那么展平后就是1352个节点.也就是说输出层的每一个神经元都需要与这1352个节点连接,每一个神经元需要学习1352(w)+1(b)个参数.

取5万条训练样本进行训练,训练后再进行测试,其准确率可超过94%.
与全连接的神经网络相比较,卷积神经网络的参数量大大降低,训练的所需要时间也相应减少.

源代码:

https://github.com/midaszhou/nnc
下载后编译:
make TEST_NAME=test_nnc3

9b6222d11de54bc7881ea3e68b1adf55.png

参考资料:
1.  MNIST手写数字集 http://yann.lecun.com/exdb/mnist/

2.  CNNs, Part 1: An Introduction to Convolutional Neural Networks - victorzhou.com 

3.  CNNs, Part 2: Training a Convolutional Neural Network - victorzhou.com

 

 

 

 

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

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

相关文章

思想道德与法治

1【单选题】公民的基本权利是指宪法规定的公民享有的基本的、必不可少的权利。公民的基本权利有不同的类别&#xff0c;公民的通信自由和通信秘密属于 A、人身自由 B、经济社会权利 C、政治权利和自由 D、教育科学文化权利 您的答案&#xff1a;A 参考答案&#xff1a;A 查…

Visual Studio 快捷键

记录一下VS的快捷键,用Xcode几个星期后回到VS一下子有点乱,还好有条件反射在,过了会就都恢复了 目录 跳转快捷键查找快捷键编辑快捷键代码折叠书签操作记忆来源VS一定要装VAssistX插件,下面的快捷键部分是VX提供的。 跳转快捷键 快速打开文件 Alt + Shift + O 快速打开对…

VSCode C/C++多文件编译配置

多文件编译备忘&#xff0c;带注释的地方都需要注意&#xff01;&#xff01;&#xff01; launch.json文件 {// 使用 IntelliSense 了解相关属性。 // 悬停以查看现有属性的描述。// 欲了解更多信息&#xff0c;请访问: https://go.microsoft.com/fwlink/?linkid830387&quo…

ChatGPT在语言辅助翻译和跨文化交流中的应用如何?

ChatGPT在语言辅助翻译和跨文化交流领域中有广泛的应用潜力&#xff0c;可以帮助人们克服语言障碍&#xff0c;促进跨文化交流和理解。以下是详细的讨论&#xff1a; **1. 实时翻译和即时交流&#xff1a;** ChatGPT可以用于实时翻译&#xff0c;使人们能够即时进行跨语言交流…

LNMP搭建以及Discuz论坛部署

目录 LNMP 编译安装 LNMP搭建 Nginx 服务 MySQL 服务 PHP 解析环境 部署 Discuz社区论坛 LNMP 目前成熟的企业网站的应用模式之一&#xff0c;指的是一套协同工作的系统和相关软件&#xff0c;能提供静态页面服务和动态web服务 L linux系统 N nginx网站服务&#xff0…

社区团购行业的解决方案:重塑业务模式,提升效率和质量

社区团购业务正在中国迅速崭露头角&#xff0c;而随着行业的快速发展&#xff0c;也带来了一系列挑战&#xff0c;包括供应链管理、物流配送、产品质量和用户体验等问题。本文将探讨这些问题&#xff0c;并提出一些可能的解决方案。 一、问题和挑战 1.1 供应链管理 对于社区团…

k8s pod数据存储Volumes

一、说在前面的话 在 Kubernetes 的 Deployment 中&#xff0c;您可以使用多种类型的 Volumes 来管理 Pod 中的数据。 作用是用来共享目录及配置&#xff0c;不用在每个pod里进行配置。 本文主要概述怎么使用HostPath、PersistentVolumeClaim、ConfigMap。 二、k8s有哪些Vol…

OC实现GZIP压缩及解压缩

这恍恍的天日晒的大地嗞嗞的作响。这湉湉的阴雨下的祖国母亲到处洪水泛滥。人本不该有三六九等&#xff0c;可这丑陋的阴雨竟然选择性的泄洪到无辜的县区以示人却有三六九等。谁的财产不是财产&#xff0c;谁的生命不是生命&#xff1f;谁特妈的不是母亲养大的&#xff1f; 一首…

C#核心知识回顾——21.归并排序

理解递归逻辑 一开始不会执行sort函数的 要先找到最小容量数组时 才会回头递归调用Sort进行排序 基本原理 归并 递归 合并 数组分左右 左右元素相比较 一侧用完放对面 不停放入新数组 递归不停分 分…

《golang设计模式》第一部分·创建型模式-04-抽象工厂模式(Abstract Factory)

文章目录 1. 概述1.1 角色1.2 类图 2. 代码示例2.1 设计2.2 代码2.3 类图 1. 概述 1.1 角色 AbstractFactory&#xff08;抽象工厂&#xff09;&#xff1a;它声明了一组用于创建产品的方法&#xff0c;每一个方法对应一种产品。ConcreteFactory&#xff08;具体工厂&#xf…

Python学习笔记:If、While

1.if if的基本结构&#xff1a; if xxxxx:xxxxxxx elif xxxx:xxxxxxx else:xxxxxxx 通过boolean判断的实例 is_hot True is_cold True if is_hot:print("its a hot day\nDrink plenty of water") elif is_cold:print("its a cold day\nWear warm clothes&…

【网络|TCP】三次握手、四次握手

TCP是一种面向连接的可靠的传输协议&#xff0c;建立和断开TCP连接时需要进行握手的过程。其中&#xff0c;TCP的连接建立需要进行三次握手&#xff0c;而连接断开则需要进行四次握手。 解释 三次握手 第一次握手&#xff1a;客户端发送一个SYN&#xff08;同步&#xff09;报…

vue el-input 使用 回车键会刷新页面的问题

场景&#xff1a; vue项目中 在输入框输入字符并按下回车键搜索时&#xff0c;不会进行搜索&#xff0c; 而是会刷新页面 原因&#xff1a; 当form表单中只有一个input时&#xff0c;按下回车建会自动触发页面的提交功能&#xff0c; 产生刷新页面的行为 解决&#xff1a; 在…

问题聚集度Hive SQL

问题聚集度&#xff1a;最小的分母占比&#xff0c;贡献最多的分子占比&#xff0c;即小规模贡献大问题。 selectcity_name,user_id,rf_type,deal_ord_cnt,sale_amt,rf_ord_cnt,rf_amt,rf_ra,rf_amt_ra,rf_all,ord_cnt_all,rf_gx,ord_cnt_gx,del_gx,row_number() over(partiti…

Spring 事务详解(注解方式)

目 录 序言 1、编程式事务 2、配置声明式事务 2.1 基于TransactionProxyFactoryBean的方式&#xff08;不常用&#xff0c;因为要为每一个类配置TransactionProxyFactoryBean&#xff09; 2.2 基于AspectJ的XML方式&#xff08;常用&#xff0c;可配置在某些类下的所有子…

docker: CMD和ENTRYPOINT的区别

ENTRYPOINT&#xff1a; 容器的执行命令&#xff08;属于正统命令&#xff09; 可以使用--build-arg ENVIROMENTintegration参数覆盖 ocker build --build-arg ENVIROMENTintegration 两者同时存在时 CMD作为ENTRYPOINT的默认参数使用外部提供参数会覆盖CMD提供的参数。 CMD单…

无涯教程-Perl - unless...else 语句函数

Perl 除非语句后可以跟可选的 else 语句&#xff0c;该语句在布尔表达式为true时执行。 unless...else - 语法 Perl编程语言中的unless... else 语句的语法为- unless(boolean_expression) {# statement(s) will execute if the given condition is false } else {# stateme…

编程导航算法村第八关 | 树的深度优先遍历

编程导航算法村第八关 | 树的深度优先遍历 判断两棵树是否相同 LeetCode100&#xff1a;给你两棵二叉树的根节点 p 和 q &#xff0c;编写一个函数来检验这两棵树是否相同。如果两个树在结构上相同&#xff0c;并且节点具有相同的值&#xff0c;则认为它们是相同的。思路&…

Go重写Redis中间件 - Go实现Redis持久化

GO实现Redis持久化 项目开发到这里,我们的下一步就是实现Redis的持久化落盘功能,Redis是一个内存型的数据库,在之前我们实现的单机版Redis如果把进程杀掉,我们通过GET、SET指令存储的数据都将不复存在,数据只存在内存的map里面,重启之后什么都没有了 我们现在的目标就是…

Net Core Webapi 使用Redis实现连续登录失败N次 锁定账号N分钟

由于最近项目发现有尝试密码登录的操作&#xff0c;需要设置密码复杂度及账号多次登录失败&#xff0c;将账号锁定N分钟后&#xff0c;才可以继续登录操作。 开始思路是使用登录记录数据处理连续登录失败的问题&#xff0c;如果频繁请求可能会导致数据库查询变慢&#xff0c;影…