继续创造,加速成长!这是我参加「日新方案 10 月更文挑战」的第4天,点击查看活动详情
前语
丢失函数用于核算模型输出值和方针值之间的距离,丢失函数也被称为方针函数、成本函数。根据不同实际问题,咱们需求界说合适的丢失函数。例如,关于分类问题,咱们通常运用交叉熵丢失。
运用优化器在练习期间更新模型参数(或称权重),PyTorch
中的 optim
包提供了各种优化算法,包含随机梯度下降 (stochastic gradient descent
, SGD
) 算法及其变体 Adam
、RMSprop
等。
在本节中,咱们将学习如何在 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神经网络模型构建