继续创造,加速成长!这是我参加「日新方案 10 月更文挑战」的第4天,点击查看活动详情

前语

丢失函数用于核算模型输出值和方针值之间的距离,丢失函数也被称为方针函数、成本函数。根据不同实际问题,咱们需求界说合适的丢失函数。例如,关于分类问题,咱们通常运用交叉熵丢失。

运用优化器在练习期间更新模型参数(或称权重),PyTorch 中的 optim 包提供了各种优化算法,包含随机梯度下降 (stochastic gradient descent, SGD) 算法及其变体 AdamRMSprop 等。

在本节中,咱们将学习如何在 PyTorch 中界说丢失函数和优化器。

界说丢失函数

咱们将界说一个丢失函数并在一小批 (mini-batch) 数据集上对其进行测验。

1. 首先,界说负对数似然丢失:

from torch import nn
loss_func = nn.NLLLoss(reduction="sum")

2.mini-batch 上测验丢失函数:

for xb, yb in train_dl:
xb=xb.type(torch.float).to(device)
yb=yb.to(device)
out=model(xb)
# 核算丢失
loss = loss_func(out, yb)
break

3. 核算关于模型参数的梯度:

loss.backward()

在本小节中,咱们首先界说了丢失函数,运用 torch.nn 包来界说负对数似然丢失,此丢失关于练习多分类神经网络模型非常有效,负对数似然丢失函数的输入是对数概率。在 PyTorch 构建模型一节中,咱们在输出层运用 log_softmax 以从模型中获取对数概率。接下来,咱们介绍了神经网络前向核算流程,提取一小批(mini-batch) 数据,将其输入模型,并核算丢失值。接下来,运用 backward() 方法核算丢失相关于模型参数的梯度,得到的梯度将在反向传达时用于优化神经网络参数。

界说优化器

接下来,咱们将界说优化器并进行反向传达步骤。

1. 界说 Adam 优化器:

from torch import optim
opt = optim.Adam(model.parameters(), lr=1e-4)

2. 运用以下代码更新模型参数:

opt.step()

3. 接下来,咱们将梯度设置为零:

opt.zero_grad()

在本小节中,咱们首先界说了 Adam 优化器,优化器的输入是模型参数和学习率。然后,咱们运用step() 方法自动更新模型参数。需求注意的是,在核算下一批数据的梯度之前,需求将梯度设置为零。

相关链接

PyTorch张量操作详解

PyTorch数据加载和处理

PyTorch神经网络模型构建