【深度学习笔记】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可以更简洁地实现多层感知机。

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

相关推荐
_落纸21 小时前
三大基础无源电子元件——电阻(R)、电感(L)、电容(C)
笔记
隐语SecretFlow1 天前
国人自研开源隐私计算框架SecretFlow,深度拆解框架及使用【开发者必看】
深度学习
Alice-YUE1 天前
【CSS学习笔记3】css特性
前端·css·笔记·html
2303_Alpha1 天前
SpringBoot
笔记·学习
Billy_Zuo1 天前
人工智能深度学习——卷积神经网络(CNN)
人工智能·深度学习·cnn
羊羊小栈1 天前
基于「YOLO目标检测 + 多模态AI分析」的遥感影像目标检测分析系统(vue+flask+数据集+模型训练)
人工智能·深度学习·yolo·目标检测·毕业设计·大作业
l12345sy1 天前
Day24_【深度学习—广播机制】
人工智能·pytorch·深度学习·广播机制
九章云极AladdinEdu1 天前
超参数自动化调优指南:Optuna vs. Ray Tune 对比评测
运维·人工智能·深度学习·ai·自动化·gpu算力
Hello_Embed1 天前
STM32HAL 快速入门(二十):UART 中断改进 —— 环形缓冲区解决数据丢失
笔记·stm32·单片机·学习·嵌入式软件
咸甜适中1 天前
rust语言 (1.88) 学习笔记:客户端和服务器端同在一个项目中
笔记·学习·rust