本文章来源于对李沐动手深度学习
代码以及原理的理解,并且由于李沐老师的代码能力很强,以及视频中讲解代码的部分较少,所以这里将代码进行尽量逐行详细解释
并且由于pytorch的语法有些小伙伴可能并不熟悉,所以我们会采用逐行解释+小实验的方式来给大家解释代码
大家都知道二分类问题我们在机器学习里面使用到的是逻辑回归这个算法,但是针对于多分类问题,我们常用的是Softmax技术,大家不要被这个名字给迷惑了,softmax回归并不是一种回归技术,而是一种分类技术
tips:本文需要下载d2l包,大家可以按照下面的指令安装
pip install -U d2l
导入模块
import torch
from IPython import display
from d2l import torch as d2l
这里如果存在报错的话,可以自己pip install
对应的模块,如果还出现了其他问题,可以在评论区中问出来
导入数据集
这里我们使用的是手写数字识别分类数据集mnist,李沐老师在d2l包李沐已经帮我们写好了下载并且导入这个数据集的函数,我们只需要指定batch_size
,然后再导入对应的模块即可
batch_size = 256
train_iter, test_iter = d2l.load_data_fashion_mnist(batch_size)
这个代码里面load_data_fashion_mnist
返回的是两个迭代器,如果对迭代器并不是特别了解的同学,可以先去看看python基础课
batch_size
相信初学者们肯定对batch_size
这个这个超参数感到非常的疑惑(超参数这个名词我们在以后的文章也会解释到)。
batch_size的官方定义是深度学习模型在训练过程中一次性输入给模型的样本数量,因为深度学习通常使用的样本都是上万的数据量,如果一口气全部给模型进行训练或者推理,那么GPU/CPU肯定会吃不消,所以我们通常会分批次将数据输入给模型。
当然有关于如何选择batch_size的问题
也是一个值得探究的问题,一般而言,如果你的CPU/GPU的内存比较小的话,建议选择比较小的batch_size,如果你的内存比较大的话,可以选择较大的batch_size,较大的batch_size可以加快你的训练速度
初始化模型参数
在我们导入的数据集中,每个样本都是 28 × 28 28 \times 28 28×28的图像,但是在我们一般的处理中,我们会选择将展平每个图像,把它们看作长度为784的向量。
需要我们注意的是Softmax回归,我们的输出与输入的类别的数目是一样多的
因此,权重将构成一个 784 × 10 784 \times 10 784×10的矩阵,偏置将构成一个 1 × 10 1 \times 10 1×10的行向量。
于是我们可以得到下面的矩阵计算公式
X 1 × 784 × W 784 × 10 + b 1 × 10 = Y 1 × 10 (1.1) X_{1 \times 784} \times W_{784 ×10} + b_{1×10}= Y_{1×10} \tag{1.1} X1×784×W784×10+b1×10=Y1