softmax手动实现+详细注释(动手学深度学习笔记)

训练结果(20个epoch 学习率)

可以看出在10epoch的时候就基本开始过拟合了


(相关资料图)

过于硬核的手动实现

由于李沐老师的softmax手动实现部分较为硬核,自己刚入门不久啃起来有些麻烦,过程中尝试自己写时也踩了不少坑,因此加了十分详尽的注释,帮助大家一起理解代码,共同学习!

此外还重写了一些方法,没有使用到老师的d2l库,个人感觉主要难点还是将python语法与算法实现相结合,一方面关注算法本身的逻辑,另一方面也要注意如何使用python实现

老师的代码封装的比较好,但很多地方的实现过于抽象,需要深入理解

读取数据集并创建dataloader

展平图像与初始化参数

视为28*28=784的向量,故输入是784,由于数据集有10个类别,所以网络输出维度是10

定义softmax算符

这里要掌握张量计算的方法

当调⽤sum运算符时,我们可以指定保持在原始张量的轴数,⽽不折叠求和的维度,如对(3,2)进行按列求和,会得到(2,),设置keepdim为True就是(1,2)即一行,分别是两列的和

定义模型

1. 例如batch_size=256,则X这里是(256,784)代表256张图片 每个图片有28x28个像素(被展平成784)

2. 权重矩阵为(784,10)代表对每种输出的各特征权重

3. 因此256x784@784x10==256x10 即每张图片会输出十个类别的置信度,如衣服20% T恤60%……大衣5%,对十个输出会加上一个bias,通过广播机制作用到所有图片

定义交叉熵损失

交叉熵只在意真实值的预测概率,因此这里是抽取每一行对应是真实类别的预测概率的那个值,拿出来求负对数

例如第一个样本应该是2类(设共三类,从0-2),并预测概率是,第二个样本应该是1类,预测是1类概率为,则交叉熵损失为

计算accuracy

(accuracy无法作为损失函数所以我们引入交叉熵,但最后还是通过accuracy来看我们预测如何)

1. argmin/argmax 可以指定axis 返回最小或最大元素的索引下标(从0开始)

2. type 更改张量的dtype类型

3. sum将True相加(因为True代表1,求和相当于计算是True的个数)

评估在任意模型上的准确率

回归训练

分类预测

结果

最后

后续会考虑边跟老师课多发笔记,希望可以降低大家debug的时间,和大家共同进步!

关键词:

推荐阅读

什么是封禅

2023-07-30

京ICP备2023022245号-31

联系我们:435 226 40 @qq.com

版权所有 ? 2020 港澳印刷网

关于我们| 联系我们| 投稿合作| 法律声明| 广告投放

所载文章、数据仅供参考,使用前务请仔细阅读网站声明。本站不作任何非法律允许范围内服务!