深度学习入门笔记系列 ( 八 ) ——基于 tensorflow 的手写数字的识别(进阶)
基于 tensorflow 的手写数字的识别(进阶)
本系列将分为 8 篇 。本次为第 8 篇 ,基于 tensorflow ,利用卷积神经网络 CNN 进行手写数字识别 。
1.引言
关于 mnist 数据集的介绍和卷积神经网络的笔记在本系列文章中已有过介绍 ,有需要可见下述两篇文章 。本系列第 5 篇曾实现利用最简单的 BP 神经网络进行手写数字识别 。本系列第 6 篇简单介绍了下卷积神经网络的知识 。
2.设计的 CNN 结构
本系列第 4 讲讲过实战可以大致分为 "三步走"
● 定义神经网络的结构和前向传播的输出结果● 定义损失函数以及选择反向传播优化的算法
● 生成会话(tf.Session) 并在训练数据上反复运行反向传播优化算法
这里也一样 ,当然首先是设计我们针对此实战的卷积神经网络 ,设计一个最简单的如下手绘 (还是那句话 ,字丑人帅 ,拒绝反驳)
上图得到两次卷积池化结果后 ,将结果展平为 1 维向量 ,即1 *(7*7*64),再连接到十个节点的输出层 。
3.手动干起来 !
首先 ,需要读取 MNIST 数据集 ,利用 TF 框架自带类进行下载读取 。
接下来就是根据之前的 “三步走” 进行实践 。实现上述的网络结构 ,并依旧选择二次代价函数和梯度下降法 。
首先 ,定义两个函数 ,用于初始化参数 。再定义两个函数实现卷积核池化(只是便于模块化 ,提高可读性)。
根据上述手绘结构图进行编程实现该结构 。
这里有一个 dropout 操作 ,目的是训练过程中使一部分神经元参数不变 ,即不参与训练 ,相当于简化结构 ,减少过拟合 。
再在会话 Session 中执行 ,并保存好模型参数 。
测试结果(小詹在按时付费的某服务器跑的结果)如下图 :
原文发布时间为:2018-09-14
本文作者:小詹本文来自云栖社区合作伙伴“ 小詹学Python”,了解相关信息可以关注“ 小詹学Python”。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
【速查表】Python下划线的含义,熟悉又陌生的东西!
1. 单前导下划线 _var 当涉及到变量和方法名称时,单个下划线前缀有一个约定俗成的含义。 它是对程序员的一个提示 - 意味着Python社区一致认为它应该是什么意思,但程序的行为不受影响。下划线前缀的含义是告知其他程序员:以单个下划线开头的变量或方法仅供内部使用。 该约定在PEP 8中有定义。 2. 单末尾下划线 var_ 有时候,一个变量的最合适的名称已经被一个关键字所占用。 因此,像class或def这样的名称不能用作Python中的变量名称。 在这种情况下,你可以附加一个下划线来解决命名冲突。 3. 双前导下划线 __var 双下划线前缀会导致Python解释器重写属性名称,以避免子类中的命名冲突。这也叫做名称修饰(name mangling) - 解释器更改变量的名称,以便在类被扩展的时候不容易产生冲突。 4. 双前导和双末尾下划线 _var_ 也许令人惊讶的是,如果一个名字同时以双下划线开始和结束,则不会应用名称修饰。 由双下划线前缀和后缀包围的变量不会被Python解释器修改。但是,Python保留了有双前导和双末尾下划线的名称,用于特殊用途。 这样的例子有,__ini...
- 下一篇
【Java】容器类总结
容器类库主要分为Collection和Map Collection 如上图,有List、Set、Queue3个接口继承了Collection接口,分别规定了三种处理数据的方式。 list 列表,只是一个接口,具体的实现方式有ArrayList(数组实现)、LinkedList(链表实现)特点:需要按照插入的顺序保存元素 set 集合,数学意义上的集合就是无重复,一种接口特点是元素不重复且无序排列,因为排列是无顺序的,所以没有get方法hashset:基于HashMap实现,查询速度快,存储元素的次序是随机的,底层使用HashMap保存HashSet中所有元素于key上,value使用一个static final的Object对象标识TreeSet将元素存储与红-黑树结构中,存储的结果是有顺序的即有顺序的不重复的集合【红黑树】O(log N) 近似平衡的二叉查找树如果我能保证树高一直为~lgN的话 那么所有查找都能在~lgN次比较中结束,但是在动态插入中保持树的完美平衡要付出的代价太大选择放松完美平衡的要求确保查找在对数时间内完成 先理解2-3树,红黑树是利用2-结点和一些额外信息(替换...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
-
Docker使用Oracle官方镜像安装(12C,18C,19C)
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8编译安装MySQL8.0.19
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
推荐阅读
最新文章
- MySQL8.0.19开启GTID主从同步CentOS8
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2整合Redis,开启缓存,提高访问速度
- Windows10,CentOS7,CentOS8安装Nodejs环境
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- Docker安装Oracle12C,快速搭建Oracle学习环境
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- CentOS7设置SWAP分区,小内存服务器的救世主