当前位置:网站首页>【深度学习21天学习挑战赛】1、我的手写被模型成功识别——CNN实现mnist手写数字识别模型学习笔记
【深度学习21天学习挑战赛】1、我的手写被模型成功识别——CNN实现mnist手写数字识别模型学习笔记
2022-08-04 05:28:00 【不负卿@】
活动地址:CSDN21天学习挑战赛
早上刚刚搭建好学习实验环境,然后就迫不及待的开始第一课的学习深度学习100例-卷积神经网络(CNN)实现mnist手写数字识别 | 第1天
分享一下今天学习过程,总结一下,也请大家指正,大体分三步:
- 模仿:认真读老师教程,照着敲一篇代码
- 思考:思考文中的一些知识点,该读文档读文档(比如一些官方文档)、该补基础补基础(比如一些算法理论)好好啃啃西瓜书
- 实践:训练完模型,自己写了数字,进行预处理,验证模型。思考应用场景
针对新学到的知识,总结如下:(源码我就不重复了,请看老师文章)
1、归一化部分
我理解的是,原图(灰度图),它的每一个像素点的取值,都是0-255,灰度也可以认为是亮度,简单说就是色彩的深浅程度。
因为取值范围是0-255,所以,老师在教程里进行
train_images / 255.0, test_images / 255.0
操作,我理解的就是把每个像素的值等比缩放成0-1区间为什么要归一化呢,相信很多同学和我一样并未完全搞清楚,我记得一本教材上说的是,归一化后加快了梯度下降求最优解的速度
2、模型定义、配置部分
卷积层,之前学opencv的时候,学了卷积算法,感觉有类似的地方。构建卷积层,用于从输入的高维数组中提取特征。卷积层的每个卷积核就是一个特征映射,用于提取某一个特征,卷积核的数量决定了卷积层输出特征个数。
老师源码中第一个卷积层,卷积核数量32,卷积核尺寸3*3
所以,我理解的,第一层卷积层的输是
input_shape=(28, 28, 1)
,输出:32
池化层,可以这样理解,池化层作用就是对某个卷积核抽取到若干特征值,只取得其中最大的那个Pool层作为保留值,其他特征值全部抛弃,值最大代表只保留这些特征中最强的,抛弃其他弱特征,可以起到减少神经网络的数据量,简化数据,加快数据处理的作用。
Flatten层:用于将上一输入层的数据压成一维的数据,可以理解为把数据拉直一般用于卷积层或全连接层之间,因为全连接层只能接收一维数据(向量),而卷积层可以处理二维数据(矩阵)。
激活函数relu:relu是用到的比较多的激活函数,它把所有的负值都变为0,而正值不变,这种操作被成为单侧抑制。
相比sigmod
函数与tanh
函数有以下几个优点:
a、克服梯度消失的问题
b、快训练速度
缺点:
a、输入负数,则完全不激活,relu函数死掉。
b、relu函数输出要么是0
,要么是正数
,也就是relu函数不是以0为中心的函数
深度学习中最大的问题是梯度消失问题,使用tanh、sigmod等饱和激活函数情况下特别严重,而relu函数凭借其线性、非饱和的形式,训练速度则快很多。
- 优化器adam:Adam 这个名字来源于自适应矩估计(Adaptive Moment Estimation),也是梯度下降算法的一种变形,但是每次迭代参数的学习率都有一定的范围,不会因为梯度很大而导致学习率(步长)也变得很大,参数的值相对比较稳定。
损失函数:如果目标是数字编码 ,比如二分类0,1,损失函数用 SparseCategoricalCrossentropy
,from_logits参数,官方文档是这样描述的:
3、模型训练情况
可以看到,训练到第四轮的时候,准确率就达到了99.22%
4、测试识别我的手写数字
写下数字
使用ps切图28*28
预处理读取图片、调整图片大小,转换成灰度
模型测试
学习日记
**
1,学习知识点
1、认识和使用卷积层、池化层的使用
2、实践CNN模型的基本搭建、训练、测试流程
3、学习了mnist数据集基本结构和使用方法
2,学习遇到的问题
还需要恶补一些神经网基础部分
边栏推荐
猜你喜欢
随机推荐
flink-sql自定义函数
SQL练习 2022/7/5
攻防世界MISC———Dift
剑指 Offer 20226/30
Thread 、Handler和IntentService的用法
(五)栈及其应用
(九)哈希表
ReentrantLock(公平锁、非公平锁)可重入锁原理
记录获取参赛选手信息过程
sklearn中的学习曲线learning_curve函数
oracle临时表与pg临时表的区别
剑指 Offer 2022/7/2
IvNWJVPMLt
flink-sql所有语法详解
跳转页面实时调用后台接口,更新页面数据
VScode配置PHP环境
ISCC2021———MISC部分复现(练武)
EPSON RC+ 7.0 使用记录一
简单说Q-Q图;stats.probplot(QQ图)
flink自定义轮询分区产生的问题