趋近智
模型根据输入数据批次生成预测(通常称为 outputs 或 logits)。为了评估这些预测与实际真实标签的匹配程度,需要一个评估机制。这就是损失函数的作用。
一个损失函数,也称为标准或目标函数,它以数学方式衡量模型预测()与真实目标值()之间的差异。训练的目的通常是使这个损失值最小化。损失越小表示模型的预测越接近给定数据批次的实际目标。
在PyTorch中,损失函数在 torch.nn 模块中随即可用,就像模型层和激活函数一样。您通常在训练循环外部只实例化一次损失函数。常见选择包括:
nn.MSELoss(均方误差):常用于回归任务,目标是预测连续值。它计算预测和目标之间的平均平方差。
其中 是批次中的样本数量。nn.CrossEntropyLoss:是多类别分类问题的标准选择。此标准在一个类中方便地结合了 nn.LogSoftmax 和 nn.NLLLoss(负对数似然损失)。它需要来自模型最后一层的原始、未归一化的分数(logits)作为输入,以及目标类别索引(整数)作为标签。nn.BCEWithLogitsLoss:用于二元分类或多标签分类任务。与 CrossEntropyLoss 类似,它在一个步骤中结合了 Sigmoid 层和二元交叉熵损失,以获得更好的数值稳定性。它也需要原始 logits 作为输入。一旦您实例化了所选的标准(例如,criterion = nn.CrossEntropyLoss()),在循环中计算损失就很直接。您只需将模型的输出张量和包含真实标签的张量传递给标准对象即可:
# --- 训练循环内部 ---
# 假设:
# model: 您的神经网络模型(例如,nn.Module 实例)
# criterion: 您选择的损失函数(例如,nn.CrossEntropyLoss())
# inputs: 来自 DataLoader 的输入数据批次
# labels: 来自 DataLoader 的相应真实标签批次
# 1. 正向传播(已完成)
outputs = model(inputs)
# 2. 计算损失
loss = criterion(outputs, labels)
# 'loss' 现在包含当前批次的计算损失值。
# 它是一个标量张量(只有一个元素的张量)。
# 3. 后续步骤:反向传播 (loss.backward()),优化器步进...
# --- 循环迭代片段结束 ---
理解生成的 loss 变量代表什么很重要:
loss 张量仍然连接着 PyTorch 在正向传播期间构建的计算图。它知道哪些操作和哪些模型参数促成了它的最终值。requires_grad=True 的参数,所以 loss 张量本身隐式地具有 requires_grad=True。这使得我们可以在下一步调用 loss.backward(),自动计算损失相对于模型所有可学习参数()的梯度。这个计算出的 loss 值作为反向传播过程的起点,它调整模型的权重,以期在后续迭代中产生更低的损失。
这部分内容有帮助吗?
MSELoss、CrossEntropyLoss 和 BCEWithLogitsLoss 的用法及参数细节。© 2026 ApX Machine Learning用心打造