【自学】手写数字识别的深入学习

0前言       

         2021.11.17-11.19我花了挺多时间在手写数字识别项目上进行了研究,看了b站视频、看了大量博客、问了前辈,感觉收获还挺多,对于一些专业名词的理解包括整个神经网络搭建也不再那么似懂非懂,反正就是有一丢丢头目了。其实在今年暑期我就接触过这个手写数字识别项目了,但是没有进行很透彻的理解,导致后期对它的印象其实是很模糊的。But!!!今时不同往日啦!所以嘞我下面就对这三天学习的知识进行小小的归纳!(其中包括一些博主的归纳我也进行简述了)

        首先了解一些基础知识吧,比如单通道图和三通道图(目前见得最广泛)。对于MINIST数据集,其中的图片都是单通道图,也叫灰度图,每个像素点只能有一个值表示颜色,该值就是指像素值,范围在0~255之间,0是黑色,255是白色,中间值是一些不同等级的灰色(也有3通道的灰度图,3通道灰度图的3个通道的值都一样)。三通道图(即常说的R、G、B三个通道),每个像素点都有3个值表示 ,即每一个点由三个值表示。其他关于图片的解释可以参考这篇博客:图片一:单通道、三通道、灰度图、黑白图、三通道转灰度图(单通道)_stay_zezo的博客-CSDN博客https://blog.csdn.net/stay_zezo/article/details/114483000?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522163732423816780271963883%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=163732423816780271963883&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-4-114483000.pc_search_mgc_flag&utm_term=%E4%B8%BA%E4%BB%80%E4%B9%88%E7%81%B0%E5%BA%A6%E5%9B%BE%E5%83%8F%E6%98%AF%E5%8D%95%E9%80%9A%E9%81%93&spm=1018.2226.3001.4187

        b站学习——手写讲解:大白话讲AI——02手写数字识别(MNIST):机器学习初体验

         以下截屏是视频中我认为最核心的讲解内容,包含了很多需要学习的知识。 

         以下是我学习视频内容整理的Goodnotes笔记:         

        h1、h2、out都只是经过线性变换得到的(即通过线性函数计算),所以为了保证函数对数据描述的准确性,需要用到激活函数,将函数图像更加贴合数据,如下图的第二幅函数图像(图一图二分别表示欠拟合和过拟合情形,这俩都需要避免)

       

        图中蓝②的输出先不要管他那些数据值,直接看蓝③。②到③其实进行了归一化(即用到了softmax函数),得到10个范围是0~1的数据,那么这些数据可以看作这个位置是“1”的概率,其实这有一种多分类的意味啦。这个“位置”和 “1"分别指的是什么呢?其实可以这么理解:有一个长度为10的数组,其数组元素下标则为0~9,即“位置”0~9,而这个数组中的每个元素的值比较特殊,取值只能为1或0(如[0]==0、[1]==1、[2]==0等),所以前面说的“1”就是数组元素的值为“1"的意思。还有更特殊的是,这10个元素只能有一个是”1",其余全部为0,所以这里就引入了一个独热编码的概念,“独”即只能一个的意思,“热”即“1”。对于0~9独热编码情况如下图所示(没有全部都写出来,其中红色字体为下标):

这里我有必要感叹一句现代计算机技术的强大,竟然能够将一张图片缩小到只有10个数字!!!

        回过头来讨论独热编码前的话题,即为什么需要归一化为概率呢?这是因为我们的训练集图片的标签(如“8”、“9”)进行了独热编码,也就是现在的标签也由十个数字组成(如图中的蓝④),那么接下来就可以对处理得到的十个概率与标签的十个数字的对应位置进行Loss计算(如[0]_image与[0]_label之间进行loss计算,[1]_image与[1]_label之间进行Loss计算),再将十个loss结果求和,那么这个和的结果就是loss函数的结果。当某个位置的概率越接近1,loss计算的时候结果越接近0,也就说明预测结果越接近实际结果,也就说明该模型越成功。

        接着就如前面笔记图片展示的那样进行梯度下降计算、更新参数、回到神经网络获得新模型......如此循环往复,知道得到最小(最优)的loss值。

        至于怎么个梯度下降、更新参数就可以看我前面的两篇博客。

おすすめ

転載: blog.csdn.net/Wendy030/article/details/121430090
おすすめ