网站建设 专用术语,万网官网4399,推广app赚钱项目,网站的组成多层感知机的从零开始实现获取和读取数据定义模型参数定义激活函数定义模型定义损失函数训练模型小结我们已经从上一节里了解了多层感知机的原理。下面#xff0c;我们一起来动手实现一个多层感知机。首先导入实现所需的包或模块。
import torch
import numpy as np获取和读取…
多层感知机的从零开始实现获取和读取数据定义模型参数定义激活函数定义模型定义损失函数训练模型小结我们已经从上一节里了解了多层感知机的原理。下面我们一起来动手实现一个多层感知机。首先导入实现所需的包或模块。
import torch
import numpy as np获取和读取数据
这里继续使用Fashion-MNIST数据集。代码和之前softmax回归是一样的我们将使用多层感知机对图像进行分类。
定义模型参数
我们在3softmax回归的从零开始实现里已经介绍了Fashion-MNIST数据集中图像形状为 28×2828 \times 2828×28类别数为10。本节中我们依然使用长度为 28×2878428 \times 28 78428×28784 的向量表示每一张图像。因此输入个数为784输出个数为10。实验中我们设超参数隐藏单元个数为256。
num_inputs, num_outputs, num_hiddens 784, 10, 256W1 torch.tensor(np.random.normal(0, 0.01, (num_inputs, num_hiddens)), dtypetorch.float,requires_gradTrue)
b1 torch.zeros(num_hiddens, dtypetorch.float,requires_gradTrue)
W2 torch.tensor(np.random.normal(0, 0.01, (num_hiddens, num_outputs)), dtypetorch.float,requires_gradTrue)
b2 torch.zeros(num_outputs, dtypetorch.float,requires_gradTrue)定义激活函数
这里我们使用基础的max函数来实现ReLU而非直接调用relu函数。
def relu(X):return torch.max(inputX, othertorch.tensor(0.0))定义模型
同softmax回归一样我们通过view函数将每张原始图像改成长度为num_inputs的向量。然后我们实现上一节中多层感知机的计算表达式。
def net(X):X X.view((-1, num_inputs))H relu(torch.matmul(X, W1) b1)return torch.matmul(H, W2) b2定义损失函数
为了得到更好的数值稳定性我们直接使用PyTorch提供的包括softmax运算和交叉熵损失计算的函数。
loss torch.nn.CrossEntropyLoss()训练模型
训练多层感知机的步骤和之前训练softmax回归的步骤没什么区别。
小结
可以通过手动定义模型及其参数来实现简单的多层感知机。当多层感知机的层数较多时本节的实现方法会显得较烦琐例如在定义模型参数的时候。