4-2多层感知机的从0开始实现
4-2多层感知机的从0开始实现
import torch
from torch import nn
from d2l import torch as d2l
batch_size = 256
train_iter, test_iter = d2l.load_data_fashion_mnist(batch_size)
1.初始化模型参数
-
w1:第一个全连接层的权重参数。 -
torch.randn(num_inputs, num_hiddens):生成一个形状为 (784, 256) 的随机张量,其元素从标准正态分布中抽取。 -
* 0.01:将随机张量的每个元素乘以 0.01,用于初始化权重。 -
nn.Parameter:将张量转换为参数,这样 PyTorch 就会自动跟踪其梯度 -
b1:第一个全连接层的偏置参数。 -
torch.zeros(num_hiddens):生成一个形状为 (256,) 的零张量。 -
nn.Parameter:将张量转换为参数,这样 PyTorch 就会自动跟踪其梯度
# 定义输入、输出和隐藏层的维度
num_inputs, num_outputs, num_hiddens = 784, 10, 256
# 初始化第一个全连接层的权重参数和偏置参数
w1 = nn.Parameter(torch.randn(num_inputs, num_hiddens, requires_grad = True) * 0.01)
b1 = nn.Parameter(torch.zeros(num_hiddens, requires_grad = True))
# 初始化第二个全连接层的权重参数和偏置参数
w2 = nn.Parameter(torch.randn(num_hiddens, num_outputs, requires_grad = True) * 0.01)
b2 = nn.Parameter(torch.zeros(num_outputs, requires_grad = True))
# 将所有参数收集到一个列表中
params = [w1, b1, w2, b2]
2.激活函数
def relu(x):
a = torch.zeros_like(x) #创建一个与张量 x 形状相同但所有元素值为 0 的张量
return torch.max(x, a)
3.模型
代码解释
x:是一个张量,通常表示输入数据。reshape:是 PyTorch 中用于改变张量形状的方法,不改变张量中的数据元素,只是重新排列它们的形状。(-1, num_inputs):是一个元组,指定了重塑后的张量形状。-1:表示该维度的大小由其他维度的大小自动推导。PyTorch 会根据张量的总元素数和其他维度的大小,自动计算出-1对应的维度大小。num_inputs:表示重塑后的张量在第二个维度上的大小,通常对应于输入特征的数量。在这个上下文中,num_inputs通常是 784,表示输入数据的特征维度(例如,28x28 的图像展平后的像素数量)。
def net(x):
x = x.reshape((-1, num_inputs))
H = relu(x@w1 + b1) # 这里 “@” 代表矩阵乘法
return (H@w2 + b2)
4.损失函数
loss = nn.CrossEntropyLoss(reduction = 'none')
5.训练
代码解释
torch.optim.SGD:是 PyTorch 中实现随机梯度下降(Stochastic Gradient Descent, SGD)优化算法的类。params:是模型的参数列表,这些参数将被优化器更新。lr:是学习率,用于控制参数更新的步长。updater:是优化器的实例,它将负责在训练过程中更新模型的参数。
最后一句
d2l.train_ch3:是 D2L 库中提供的一个训练函数,用于训练神经网络。net:是定义好的神经网络模型。train_iter:是训练数据的迭代器,用于在训练过程中逐批次提供训练数据。test_iter:是测试数据的迭代器,用于在训练过程中评估模型在测试集上的性能。loss:是损失函数,用于计算模型的预测值与真实标签之间的差异。num_epochs:是训练的总轮次。updater:是优化器实例,用于更新模型的参数。
num_epochs, lr = 10, 0.1 #训练轮次,学习率
updater = torch.optim.SGD(params, lr=lr)
d2l.train_ch3(net, train_iter, test_iter, loss, num_epochs, updater)
# 测试模型
d2l.predict_ch3(net, test_iter)

本章主要使用pytorch从0开始实现多层感知机,从初始化模型、激活函数、模型、损失函数和训练等五个步骤来实现
浙公网安备 33010602011771号