企业网站建设图片,公司静态网站模板下载,莆田建设企业网站,易县网站建设注#xff1a;本文为《动手学深度学习》开源内容#xff0c;仅为个人学习记录#xff0c;无抄袭搬运意图 3.10 多层感知机的简洁实现
下面我们使用PyTorch来实现上一节中的多层感知机。首先导入所需的包或模块。
import torch
from torch import nn
from torch.nn import … 注本文为《动手学深度学习》开源内容仅为个人学习记录无抄袭搬运意图 3.10 多层感知机的简洁实现
下面我们使用PyTorch来实现上一节中的多层感知机。首先导入所需的包或模块。
import torch
from torch import nn
from torch.nn import init
import numpy as np
import sys
sys.path.append(..)
import d2lzh_pytorch as d2l3.10.1 定义模型
和softmax回归唯一的不同在于我们多加了一个全连接层作为隐藏层。它的隐藏单元个数为256并使用ReLU函数作为激活函数。
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(), #这是一个激活函数层它使用 ReLURectified Linear Unit函数作为激活函数。ReLU 函数将所有负值置为 0而正值则保持不变。这有助于网络学习非线性关系。nn.Linear(num_hiddens, num_outputs), #这是另一个全连接层它接受 num_hiddens 个输入即上一个隐藏层的输出并输出 num_outputs 个结果。这个输出层通常不包含激活函数因为最后的输出将被解释为每个类别的概率通过 softmax 函数。)#初始化网络中所有参数的值
for params in net.parameters():init.normal_(params, mean0, std0.01)net.parameters() 返回一个包含网络中所有参数权重和偏置的迭代器。
init.normal_ 是一个就地in-place操作它会直接修改传入的参数张量params而不是创建一个新的张量。
mean0, std0.01 指定了正态分布高斯分布的均值和标准差用于生成初始化值。这里使用了较小的标准差0.01意味着初始化值将接近于 0但会有一定的随机性。这种初始化方法有助于网络更快地收敛但也可能导致训练过程中的一些不稳定性。
3.10.2 读取数据并训练模型
我们使用与3.7节中训练softmax回归几乎相同的步骤来读取数据并训练模型。 注由于这里使用的是PyTorch的SGD而不是d2lzh_pytorch里面的sgd所以就不存在3.9节那样学习率看起来很大的问题了。 batch_size 256
train_iter, test_iter d2l.load_data_fashion_mnist(batch_size)
loss torch.nn.CrossEntropyLoss()optimizer torch.optim.SGD(net.parameters(), lr0.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可以更简洁地实现多层感知机。 注本节除了代码之外与原书基本相同原书传送门