Notes on Section 3.6
这个单元旨在空头构建一个基于mnist的训练模型
首先我们引入训练集
(这里有一个已经打包的程序,可以直接使用,batch_size指定了同时的训练量)

这里的784对应的是每个像素点的输入,10个输出对应10个种类的概率情况

然后我们常规的使用正态分布初始化权重,bias初设为0
然后我们的softmax函数部分

这里解释一下这个sum的原理

需要注意的是,当我们不使用keepdim时,被指定的维度会消失,也就是生成的张量维度比原张量少1,但是使用keepdim则保留了指定的维度
实现效果如下

然后定义模型

这里我们将X展平成一个二维向量,相当于就是将图像的二维数据一维化了,和W.shape[0]的输入格式相匹配,然后执行矩阵乘法,然后添加权重

这里定义的损失函数,如果不是很懂公式可以往回看,这里使用的是简化后的公式
返回值是这个批次的交叉熵,一个一维向量,每个元素对应一个样本点的交叉熵
但是一个样本点的预测和实际值是否相符合是一个布尔值,所以我们可以通过比较给出权重下的准确度

同样,对于一个打包好的net,我们同样也可以估计其精度

这里有一个调为eval的模式
另外我们注意到关闭了梯度计算,是为了节省算力(因为不需要反向传播)
另外作者提到
“我们在(Accumulator实例中创建了2个变量, 分别用于存储正确预测的数量和预测的总数量)。”
以下是实现形式

然后我们编写训练的部分
这里的isinstance就是为了判断损失函数和当前模型是否符合要求(if else兼容了两种处理loss的方式)
解释一下为什么有分支


中间作者引入了一个可视化模块Animator,这里不展开

最后的assert是一个断言语句,检验模型是否达到要求
- Title: Notes on Section 3.6
- Author: bobown_yao
- Created at : 2025-12-07 00:00:00
- Updated at : 2026-01-17 16:18:07
- Link: https://bobownyao.github.io/2025/12/07/Notes-on-Section-3-6/
- License: All Rights Reserved © bobown_yao