深度学习基础课:用全连接层识别手写数字(上)
大家好~我开设了“深度学习基础班”的线上课程,带领同学从0开始学习全连接和卷积神经网络,进行数学推导,并且实现可以运行的Demo程序
线上课程资料:
本节课录像回放
加QQ群,获得ppt等资料,与群主交流讨论:106047770
本系列文章为线上课程的复盘,每上完一节课就会同步发布对应的文章
本文为第五节课:“用全连接层识别手写数字(上)”的复盘文章
本课程系列文章可进入索引查看:
深度学习基础课系列文章索引
为什么要学习本课
- 如何用全连接层识别下面的手写数字?
回顾相关课程内容
- 第三节课:全连接层的前向和后向传播推导
- 全连接层的网络结构是什么?
- 如何实现前向传播?
- 如何实现后向传播?
- 如何实现训练?
- 如何使用全连接层实现“判断性别Demo”?
主问题:输入是什么?
- 输入层的输入数据是什么?
答:手写数字图片的像素的亮度值 - 如何处理输入数据?
- 把整个手写数字图片作为输入数据会有什么问题?
答:
输出不确定;
单个样本的像素太多,造成输入层神经元过多,训练不容易收敛;
变化太多了(每个数字一变,整个样本就变了),训练不容易收敛; - 如何解决该问题?
答:拆分成每个数字一张图片:
- 把整个手写数字图片作为输入数据会有什么问题?
主问题:输出是什么?
- 需要的输出数据是什么?
答:一个数字,范围为0-9 - 如何设计输出层的输出数据?
答:输出层输出10个数字,数字的范围为[0.0,1.0] - 如何确定输出的是哪个数字?
答:最大的数字的序号,即为输出的数字
主问题:网络结构是什么?
- 已知每个数字图片的像素数量为28*28=784,那么输入层节点数(神经元的个数)是多少?
答:784 - 输出层节点数是多少?
答:10 - 我们使用1层隐藏层
- 隐藏层节点数是多少?
答:下图为一些估计公式,我们使用第一个公式来估计,取30
主问题:如何判断训练是否收敛?
- 我们之前是如何判断的?
答:判断loss是否接近0 - 现在还行得通吗?
- 损失函数需要改变吗?
答:需要 - 如何改变?
答:改变后的损失函数公式为:
- 损失函数需要改变吗?
- 除了判断误差的方法,还有其它的方法来判断是否收敛吗?
答:判断正确率
任务:实现训练
- 什么是训练集,什么是测试集?
答:参考机器学习笔记:训练集、验证集和测试集区别 - 介绍mnist数据集
- 请参考LinearLayerGradientCheck_answer,实现训练的代码
答:待实现的代码:ImplementTrain
实现后的代码:ImplementTrain_answer - 请每个同学都运行“训练数据集”的代码,检查训练是否收敛?
答:没有收敛,正确率一直卡在10%上不去
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?