动手学深度学习 3.9 多层感知机的从零开始实现
前言
从零开始学习ai文章系列计划是个人在《动手学深度学习》和《磨菇书》两本书的学习中的个人笔记,文章也会以课本中的章节分开,即每个章节一片笔记。我会尽量的把主要内容以及遇到的难点进行记录与解决,如果哪里有错误的欢迎指正。或者不清晰的可以直接查看原文部分。
《动手学深度学习》原文(课本):https://tangshusen.me/Dive-into-DL-PyTorch/#/
《动手学深度学习》代码:https://github.com/ShusenTang/Dive-into-DL-PyTorch
(由于有时候公式太多,可能会直接贴图片)
这节我们用多层感知机来解决之前的图片分类问题。
本节基础代码较多,也有许多以前用过的函数,不会进行过多解释占用额外篇幅。
1. 获取和读取数据
继续用之前的图片数据fashion_mnist。
1 | def load_data_fashion_mnist(batch_size, resize=None, root='~/Datasets/FashionMNIST'): |
2. 定义模型参数
1 | num_inputs, num_outputs, num_hiddens = 784, 10, 256 |
3. 定义激活函数
1 | def relu(X): |
torch.max函数接受2个参数,第一个数输入的矩阵X,第二个other参数是标量0。其作用是X中每个数与0进行比较,区最大的值作为新矩阵中的元素。其结果是与X同大小的,大于等于0的新矩阵。
4. 定义模型
1 | def net(X): |
5. 定义损失函数
为了得到更好的数值稳定性,我们直接使用PyTorch提供的包括softmax运算和交叉熵损失计算的函数。
1 | loss = torch.nn.CrossEntropyLoss() |
6. 训练模型
训练多层感知机的步骤和3.6节中训练softmax回归的步骤没什么区别。我们直接调用d2lzh_pytorch包中的train_ch3函数,它的实现已经在3.6节里介绍过。我们在这里设超参数迭代周期数为5,学习率为100.0。
(学习率之所以这么大,应该是因为d2lzh_pytorch里面的sgd函数在更新的时候除以了batch_size,其实PyTorch在计算loss的时候已经除过一次了,sgd这里应该不用除了)

1 | def train_ch3(net, train_iter, test_iter, loss, num_epochs, batch_size, |

当多层感知机的层数较多时,本节的实现方法会显得较烦琐,例如在定义模型参数的时候。