依据《动手学深度学习》课程理解并复现多层感知机的代码
一、多层感知机简介
多层感知机(Multilayer Perceptron, MLP)是一种前馈人工神经网络模型,它由多个层级组成,每个层级包含多个神经元。MLP 最基本的形式包括一个输入层、一个或多个隐藏层以及一个输出层。每层中的神经元与下一层的所有神经元完全连接,形成一种“全连接”的网络结构。这种结构使得MLP能够学习输入数据与输出之间的复杂非线性关系。
主要组成部分
(1)输入层:接收原始输入数据。每个神经元代表输入数据的一个特征。
(2)隐藏层:位于输入层和输出层之间的一层或多层。这些层不直接与外部世界交互,因此称为“隐藏”层。每个隐藏层可以有任意数量的神经元,这些神经元负责提取输入数据的特征,并进行非线性变换。
(3)输出层:产生网络的最终输出。输出层的神经元数量取决于具体的应用场景,例如,在分类任务中,输出层的神经元数量通常等于类别数;在回归任务中,输出层可能只有一个神经元。
- 用沐神的两页ppt来简述多层感知机的概念


二、多类分类问题MLP实例
- 直接上代码
从part8-线性规划学习到的大体框架而言:
(0)数据筛选:直接采用“torchvision.datasets.FashionMNIST”数据集
(1)构建模型:nn.Sequential模型由Flatten层输入,经由两个全连接层输出,输入层(向量长度=784),隐藏层(向量长度=256),输出层(向量长度=10)【784是图像(28x28)的像素展平成1维,10为图像分类数】
(2)构建损失函数:nn.CrossEntropyLoss(reduction=‘none’),采用交叉熵作为损失函数
(3)设置超参数:batch_size、lr、num_epochs
(4) 迭代优化:SGD
import torch
from torch import nn
from d2l import torch as d2l
num_works = 0
'''
nn.Flatten() - 这个层的作用是将输入数据展平成一维向量。通常用于图像数据从多维(如28x28像素的图像)转换为一维(如784个元素的向量)。
整个模型通过nn.Sequential容器串联起来,按照定义的顺序执行每一层的操作。
当输入数据流经这个模型时,首先会被展平,然后传递给第一个全连接层,接着经过ReLU激活函数,最后再通过第二个全连接层产生最终的输出。
'''
net = nn.Sequential(nn.Flatten(), nn.Linear(784, 256), nn.ReLU(),
nn.Linear(256, 10))
def init_weights(m):
if type(m) == nn.Linear:
nn.init.normal_(m.weight, std=0.01)
net.apply(init_weights)
batch_size, lr, num_epochs = 256, 0.1, 10
# 交叉熵作为损失函数
loss = nn.CrossEntropyLoss

最低0.47元/天 解锁文章
386

被折叠的 条评论
为什么被折叠?



