创建损失函数和优化器
在这篇文章中,我们为模型设置损失函数和优化器。
如代码清单 1 所示,因为现在处理的是多分类问题,所以损失函数选择 nn.CrossEntropyLoss();优化器选择通用的随机梯度下降 torch.optim.SGD()。
- loss_fn = nn.CrossEntropyLoss()
- optimizer = torch.optim.SGD(params=model_0.parameters(),
- lr=0.1)
nn.CrossEntropyLoss
nn.CrossEntropyLoss() 损失函数结合了 softmax 函数和负对数似然损失。
softmax 是 nn.CrossEntropyLoss() 的第一步,用于将模型的原始输出 logits 转化为概率分布:
\(P(y_i) = \frac{e^{z_i}}{\sum_{j=1}^n e^{z_j}}\)
softmax 输出的是每个类别的预测概率,负对数似然损失将其转化为损失值:
\(\text{NLL} = -y_i \log(\hat{y}_i)\)
\(\hat{y}_i\) 是 softmax 的输出;\(y_i\) 是真实的标签,计算时可以省略。
nn.CrossEntropyLoss() 就是将两者结合:
\(\text{CrossEntropyLoss} = -\log\left(\frac{e^{z_{y}}}{\sum_{j=1}^n e^{z_j}}\right)\)