多层感知机(MLP)的从零开始实现
基于Fashion-MNIST图像分类数据集
一、初始化模型参数
Fashion-MNIST中的每个图像由28*28=784个灰度像素值组成,所有图像共分为10个类别,忽略像素间的空间结构,可以将每个图像视为具有784个输入特征和10个类的简单分类数据集。
首先。我们将实现一个具有单隐藏层的多层感知机。通常,因为内存在硬件中的分配和寻址方式,我们选取2的若干次幂作为层的宽度,使计算更有效。
二、激活函数
实现ReLU激活函数,其他激活函数还有SIGMOD、Tanh等,但一般使用ReLU
三、模型
利用reshape将每个二维图像转换为一个长度为num_inputs的向量。
X = X.reshape((-1,num_inputs))
四、损失函数
在softmax回归中,我们的输出与类别一样多。因为数据集有10个类别,所以输出维度为10,权重将构成784*10的矩阵,偏置构成1*10的矩阵,我们首先对权重矩阵进行正态分布,对偏置矩阵初始化为0。
五、预测类别
给定预测概率分布,然后我们选择每一类预测概率最高的类。当预测类别和标签y一致时,预测正确。为了计算精度,首先,如果y_hat是矩阵,我们将预测的各类别的概率存储在第二维度(行),按照argmax找出行中概率值最大的下标索引作为预测出的类别,将y_hat的数据类型转换成和y一致,利用“==”判断,结果输出0或1的张量。
六、训练
首先,我们定义一个函数来训练一个迭代周期。
请注意,updater是更新模型参数的常用函数,它接受批量大小作为参数。 它可以是d2l.sgd函数,也可以是框架的内置优化函数。