活动地址:CSDN21天学习挑战赛
早上刚刚搭建好学习实验环境,然后就迫不及待的开始第一课的学习深度学习100例-卷积神经网络(CNN)实现mnist手写数字识别 | 第1天
分享一下今天学习过程,总结一下,也请大家指正,大体分三步:
针对新学到的知识,总结如下:(源码我就不重复了,请看老师文章)
我理解的是,原图(灰度图),它的每一个像素点的取值,都是0-255,灰度也可以认为是亮度,简单说就是色彩的深浅程度。
因为取值范围是0-255,所以,老师在教程里进行train_images / 255.0, test_images / 255.0操作,我理解的就是把每个像素的值等比缩放成0-1区间
为什么要归一化呢,相信很多同学和我一样并未完全搞清楚,我记得一本教材上说的是,归一化后加快了梯度下降求最优解的速度
卷积层,之前学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函数凭借其线性、非饱和的形式,训练速度则快很多。
损失函数:如果目标是数字编码 ,比如二分类0,1,损失函数用 SparseCategoricalCrossentropy,from_logits参数,官方文档是这样描述的:


可以看到,训练到第四轮的时候,准确率就达到了99.22%
写下数字

使用ps切图28*28


预处理读取图片、调整图片大小,转换成灰度
模型测试

**
1,学习知识点
1、认识和使用卷积层、池化层的使用
2、实践CNN模型的基本搭建、训练、测试流程
3、学习了mnist数据集基本结构和使用方法
2,学习遇到的问题
还需要恶补一些神经网基础部分