大家好~我开设了“深度学习基础班”的线上课程,带领同学从0开始学习全连接和卷积神经网络,进行数学推导,并且实现可以运行的Demo程序
线上课程资料:
本节课录像回放
加QQ群,获得ppt等资料,与群主交流讨论:106047770
本系列文章为线上课程的复盘,每上完一节课就会同步发布对应的文章
本文为第五节课:“用全连接层识别手写数字(上)”的复盘文章
本课程系列文章可进入索引查看:
深度学习基础课系列文章索引
为什么要学习本课
- 如何用全连接层识别下面的手写数字?
回顾相关课程内容
- 第三节课:全连接层的前向和后向传播推导
- 全连接层的网络结构是什么?
- 如何实现前向传播?
- 如何实现后向传播?
- 如何实现训练?
- 如何使用全连接层实现“判断性别Demo”?
主问题:输入是什么?
- 输入层的输入数据是什么?
答:手写数字图片的像素的亮度值 - 如何处理输入数据?
- 把整个手写数字图片作为输入数据会有什么问题?
答:
输出不确定;
单个样本的像素太多,造成输入层神经元过多,训练不容易收敛;
变化太多了(每个数字一变,整个样本就变了),训练不容易收敛; - 如何解决该问题?
答:拆分成每个数字一张图片:
- 把整个手写数字图片作为输入数据会有什么问题?
主问题:输出是什么?
- 需要的输出数据是什么?
答:一个数字,范围为0-9 - 如何设计输出层的输出数据?
答:输出层输出10个数字,数字的范围为[0.0,1.0] - 如何确定输出的是哪个数字?
答:最大的数字的序号,即为输出的数字
主问题:网络结构是什么?
- 已知每个数字图片的像素数量为28*28=784,那么输入层节点数(神经元的个数)是多少?
答:784 - 输出层节点数是多少?
答:10 - 我们使用1层隐藏层
- 隐藏层节点数是多少?
答:下图为一些估计公式,我们使用第一个公式来估计,取30
主问题:如何判断训练是否收敛?
- 我们之前是如何判断的?
答:判断loss是否接近0 - 现在还行得通吗?
- 损失函数需要改变吗?
答:需要 - 如何改变?
答:改变后的损失函数公式为: \( e=\frac{1}{n}\sum_{i=1}^n (\left\vert \overrightarrow{y_{真实}} - \overrightarrow{y_{输出}} \right\vert)^2 \)
- 损失函数需要改变吗?
- 除了判断误差的方法,还有其它的方法来判断是否收敛吗?
答:判断正确率
任务:实现训练
- 什么是训练集,什么是测试集?
答:参考机器学习笔记:训练集、验证集和测试集区别 - 介绍mnist数据集
- 请参考LinearLayerGradientCheck_answer,实现训练的代码
答:待实现的代码:ImplementTrain
实现后的代码:ImplementTrain_answer - 请每个同学都运行“训练数据集”的代码,检查训练是否收敛?
答:没有收敛,正确率一直卡在10%上不去