基于人工智能方法的手写数字图像识别_【工程分析】基于ResNet的手写数字识别...
ねぇ 呐
私に気付いてよ 快点注意到我吧
もう そんな事 那种事 一定
望んでも 再去奢求
しょうがないだろ 也无可奈何吧
——真野あゆみ《Bipolar emotion》(作詞:Mitsu)
本文将以mnist为原材料,用ResNet模型,实现一个正确率超过99%的手写数字分类器。
材料准备
首先我们下载MNIST数据集——可以从我的这篇文章中找到资源:
刘冬煜:关于图像识别的相关图片资源zhuanlan.zhihu.com
接着,我们搭建一个较深层的网络结构:
CNN.set_Input_Layer(1); /* 0 */ //28x28CNN.add_Convolution_Layer(16, 5, 5, Valid); //24x24CNN.add_BatchNorm_Layer(16); /* 2 */CNN.add_Activation_Layer(&relu_actfunc, 16);CNN.add_Pooling_Layer(16, 2, 2, Max_Pooling); //12x12CNN.add_Convolution_Layer(40, 5, 5, Valid); //8x8CNN.add_Activation_Layer(&relu_actfunc, 40); /* 6 */ //------.CNN.add_Convolution_Layer(40, 3, 3, Same); // |CNN.add_Activation_Layer(&relu_actfunc, 40); // |CNN.add_Convolution_Layer(40, 3, 3, Same); //<-----'CNN.create_short_cut(6, 9);CNN.add_Activation_Layer(&relu_actfunc, 40);CNN.add_Convolution_Layer(64, 5, 5, Same);CNN.add_BatchNorm_Layer(64); /* 12 */CNN.add_Activation_Layer(&relu_actfunc, 64);CNN.add_Convolution_Layer(64, 5, 5, Valid); //4x4CNN.add_Activation_Layer(&relu_actfunc, 64);CNN.add_Spatial_Pyramid_Pooling_Layer(320, Average_Pooling, 2); //1x1CNN.add_Fully_Connected_Layer(10);CNN.add_Softmax_Layer(10); /* 18 */
材料准备完成,下一步将是数据的处理。
预处理
首先,我们将60000张手写数字图片读入到显存之中,通过公式
由于对于原图每个像素点,RGB值都相等(灰度图),我们索性将三个通道合并为了一个通道作为输入。
损失函数
这是一个单标签多分类问题,我们可以使用交叉熵公式。这里我保留了反向概率项:
其中
通过交叉熵损失函数,我们能提高正确标签对应神经元的输出,降低错误标签对应神经元的输出。
其他超参数
由于采用了Adam法更新参数,我使用初始学习率
ResNet往往不使用Dropout,这个工程也不例外,因而我采用了L2正则化。初始的惩罚为:权值惩罚因子
Batch size我设置得小了一点(因为我的显存比较小),只有60。
训练过程
起初误差下降得非常好:
但训练了一段时间后,明显感觉“后劲不足”:
于是我果断将学习率砍掉一半,并提高了两个动量项,使用学习率
于是乎误差又稳定地下降了不少:
于是我每迭代500轮,都会将网络的学习率砍掉一半,并缓缓提升动量和惩罚因子。
大约训练到第3000轮的时候,我测试了一下网络,其中训练集结果和测试集结果如下:
接下来就要加入“提前终止”了——每训练200轮跑一次验证集,如果验证集的准确率有所下降,提前终止训练。
结果到第400轮的时候就结束了,结果如下:
最终我把错误预测的结果挑了出来:
有些被错误预测的结果甚至可以迷惑一个正常人类了……
我们甚至还可以将特征可视化出来,看图片那些成分相应每一个标签:
可以横向比较——对于每张手写数字图片,正确标签响应位置与其他标签是有明显不同的。
这个网络的二进制文件我也将会发到专栏的GitHub上。
开学了。
今天带着学妹逛校园,好开心。
同时这也让我感受到了一些哲理。
我懂得一个人来上海举目无亲的寂寞,但我却不希望学弟学妹继承这份失落。
同样经历过实验失败的痛苦,我也不希望有人重蹈覆辙。
专栏依旧不定期更新,敬请期待。
基于人工智能方法的手写数字图像识别_【工程分析】基于ResNet的手写数字识别...相关推荐
- 基于人工智能深度学习技术的高速公路路段安全指数分析与预测
基于人工智能深度学习技术的高速公路路段安全指数分析与预测 保障交通运输安全平稳运行! 保障交通运输安全平稳运行! 保障交通运输安全平稳运行! 对滴,重要事情一定要说三遍 加强道路安全与畅通 是促进交通 ...
- python鱼眼图像识别_一种基于鱼眼摄像头的人脸识别锁以及识别方法与流程
本发明涉及人脸识别领域,特别涉及一种基于鱼眼摄像头的人脸识别锁. 背景技术: 人脸识别具有用在门锁上存在一些不足.例如,门锁一般装在门上,其高度在安装时已经固定,针对不同身高的用户来说可能造成人脸图像 ...
- 调用枚举接口重写方法提示找不到符号_看看人家那后端API接口写得,那叫一个巴适~...
前言 在目前应用发达的场景下,我们往往需要接入客户端(win).APP程序.网站程序.以及目前热火朝天的微信应用等,这些数据应该可以由同一个服务或者同事由多个提供, Web API作为整个纽带的核心, ...
- 基于zynq的千兆网udp项目_一种基于ZYNQ的四路万兆以太网安全交换机的制作方法...
本实用新型涉及网络安全.网络通信技术领域,尤其是一种基于ZYNQ的四路万兆以太网安全交换机,适用于大中型企业的交换网络. 背景技术: 随着互联网的高速发展,传统的以太网交换机在功能和性能上已不能满足要 ...
- 基于词典方法和机器学习方法的中文情感倾向分析(毕业设计:附完整代码)
项目概述: 使用机器学习 和 情感词典 这两种方法 分别对中文新闻类文本进行情感极性分析 输入一段新闻文本能够得到文本的情感极性 1.3 目标人群 需要对已有中文文本数据进行情感分析的企业及用户 AP ...
- java正则表达式匹配数字范围_在java中怎么利用正则表达式匹配数字
在java中怎么利用正则表达式匹配数字 发布时间:2020-12-03 17:47:12 来源:亿速云 阅读:58 作者:Leah 在java中怎么利用正则表达式匹配数字?针对这个问题,这篇文章详细介 ...
- 如何把自己的经历写成小说_教你如何把一本小说写成太监
文/不追猫 2016年过完春节我决定开始写小说,当时我辞职了,前一份的工作是工程管理,其实是什么都做,需要去工地,去找甲方监理办事,做工程资料.决算送审等等,属于跑腿打杂的那种. 那不是我喜欢的工作, ...
- python 写入excel数字格式_从Pandas写入Excel时设置默认数字格式
我把浮点数的格式改为小数点后1位.data = {'A Prime': {0: 3.26, 1: 3.24, 2: 3.22, 3: 3.2, 4: 3.18, 5: 3.16, 6: 3.14, 7 ...
- 夸奖对方代码写的好_夸奖别人画得好怎么写
展开全部 可以使用一些成语: 栩栩如生:形容画作.雕塑中的艺术形象等生动逼真,就像活的一32313133353236313431303231363533e58685e5aeb9313333656634 ...
最新文章
- 2 Hadoop的安装与配置
- jvm 堆 比例_JVM调优原则
- 搭建opencv环境
- IDEA(2021)最全常用快捷键《必须收藏》
- Linq的Distinct太不给力了
- AD09由英文改中文菜单步骤
- 那是什么进程 —— svchost.exe是什么? 它为何运行?
- 时间序列-异常检测(Anomaly Detection)(四):深度学习方法
- Java Web之Cookie、Session
- Matlab中绘制颜色渐变曲线
- itext将html转换为pdf,使用itext将html转换为pdf
- 程序员最大的悲哀是什么?
- Pytorch、TorchVision、Python、Jetpack版本匹配问题
- jupyter notebooks打开的是百度网盘
- 华北电大学计算机考研资料汇总
- 【数据编制架构】什么是数据编织(Data fabric)? 完整指南
- 面试经验之华为暑期实习
- 现在计算机有64位吗,任何电脑都可以装64位系统吗|是不是所有的电脑都可以装64位系统...
- android直播app下载地址,g直播app官方下载安装
- [译] 设计师的决策树:当遇到猪队友时,你需要一个系统来控制每个人