【深度学习笔记】3_10 多层感知机的PyTorch实现

注:本文为《动手学深度学习》开源内容,仅为个人学习记录,无抄袭搬运意图

3.10 多层感知机的简洁实现

下面我们使用PyTorch来实现上一节中的多层感知机。首先导入所需的包或模块。

python 复制代码
import torch
from torch import nn
from torch.nn import init
import numpy as np
import sys
sys.path.append("..") 
import d2lzh_pytorch as d2l

3.10.1 定义模型

和softmax回归唯一的不同在于,我们多加了一个全连接层作为隐藏层。它的隐藏单元个数为256,并使用ReLU函数作为激活函数。

python 复制代码
num_inputs, num_outputs, num_hiddens = 784, 10, 256

#定义了神经网络的结构    
net = nn.Sequential(
        d2l.FlattenLayer(), #即把多维的输入一维化,常用在从卷积层到全连接层的过渡
        nn.Linear(num_inputs, num_hiddens), #这是一个全连接层(也叫线性层或密集层),它接受 num_inputs 个输入,并输出 num_hiddens 个结果。
        nn.ReLU(),  #这是一个激活函数层,它使用 ReLU(Rectified Linear Unit)函数作为激活函数。ReLU 函数将所有负值置为 0,而正值则保持不变。这有助于网络学习非线性关系。
        nn.Linear(num_hiddens, num_outputs),  #这是另一个全连接层,它接受 num_hiddens 个输入(即上一个隐藏层的输出),并输出 num_outputs 个结果。这个输出层通常不包含激活函数,因为最后的输出将被解释为每个类别的概率(通过 softmax 函数)。
        )

#初始化网络中所有参数的值
for params in net.parameters():
    init.normal_(params, mean=0, std=0.01)

net.parameters() 返回一个包含网络中所有参数(权重和偏置)的迭代器。

init.normal_ 是一个就地(in-place)操作,它会直接修改传入的参数张量(params),而不是创建一个新的张量。

mean=0, std=0.01 指定了正态分布(高斯分布)的均值和标准差,用于生成初始化值。这里使用了较小的标准差(0.01),意味着初始化值将接近于 0,但会有一定的随机性。这种初始化方法有助于网络更快地收敛,但也可能导致训练过程中的一些不稳定性。

3.10.2 读取数据并训练模型

我们使用与3.7节中训练softmax回归几乎相同的步骤来读取数据并训练模型。

注:由于这里使用的是PyTorch的SGD而不是d2lzh_pytorch里面的sgd,所以就不存在3.9节那样学习率看起来很大的问题了。

python 复制代码
batch_size = 256
train_iter, test_iter = d2l.load_data_fashion_mnist(batch_size)
loss = torch.nn.CrossEntropyLoss()

optimizer = torch.optim.SGD(net.parameters(), lr=0.5)

num_epochs = 5
d2l.train_ch3(net, train_iter, test_iter, loss, num_epochs, batch_size, None, None, optimizer)

输出:

复制代码
epoch 1, loss 0.0030, train acc 0.712, test acc 0.744
epoch 2, loss 0.0019, train acc 0.823, test acc 0.821
epoch 3, loss 0.0017, train acc 0.844, test acc 0.842
epoch 4, loss 0.0015, train acc 0.856, test acc 0.842
epoch 5, loss 0.0014, train acc 0.864, test acc 0.818

小结

  • 通过PyTorch可以更简洁地实现多层感知机。

注:本节除了代码之外与原书基本相同,原书传送门

相关推荐
AOwhisky7 分钟前
Redis 学习笔记(第二期):核心数据类型与消息队列实战
运维·数据库·redis·笔记·学习·云计算
江屿风12 分钟前
C++图论基础拓扑排序算法流食般投喂
开发语言·c++·笔记·算法·排序算法
benben04417 分钟前
ONNX从入门到精通大全
人工智能·pytorch·python
高洁0117 分钟前
知识图谱与推荐系统实战
深度学习·机器学习·transformer·virtualenv·知识图谱
EQUINOX133 分钟前
【论文阅读】| ViT精读
论文阅读·人工智能·深度学习·机器学习
OSwich34 分钟前
【UE5学习笔记】UMG中控件命名规范
笔记·学习·ue5
金斗潼关36 分钟前
PyTorch+CNN实现衣物分类
pytorch·分类·cnn
装不满的克莱因瓶4 小时前
链式法则如何传递参数误差 —— 深入理解神经网络中的梯度传播
人工智能·python·深度学习·神经网络·数学·机器学习·ai
问心无愧05139 小时前
ctf show web入门111
android·前端·笔记
和平宇宙13 小时前
AI笔记005. hermes-DeepSeek V4 Pro, 128K上下文引发的探索
前端·人工智能·笔记