pytorch api notes


nn.CrossEntropyLoss()

$$
softmax(x)=\frac{e^{x_{i}}}{\sum_{j}e^{x_{j}}}
$$

$$
logsoftmax(x)=log\frac{e^{x_{i}}}{\sum_{j}e^{x_{j}}}
$$

logsoftmax能够解决函数上溢和下溢的问题,加快运算速度,提高数据稳定性。简单说,因为softmax会进行指数操作,当$x_{i}$的值过大或者过小的时候$e^{x_{i}}$可能会超过float的表示范围(即上溢),也可能四舍五入为0,导致下溢。

NLLLoss(),即负对数似然损失函数(Negtive Log Likehood)
$$
nllloss=-\frac{1}{N}\sum_{i=1}^{N}y_{i}(logsoftmax)
$$
$y_{i}$是one_hot编码后的数据标签

CrossEntropyLoss其实是LogSoftMax和NLLLoss的合体

  1. 分类任务
  2. 向更高精度和召回值优化

detach()

从计算图中脱离出来。

假设有模型A和模型B,我们需要将A的输出作为B的输入,但训练时我们只训练模型B. 那么可以这样做:

input_B = output_A.detach()

它可以使两个计算图的梯度传递断开,从而实现我们所需的功能。

返回一个新的tensor,新的tensor和原来的tensor共享数据内存,但不涉及梯度计算,即requires_grad=False。修改其中一个tensor的值,另一个也会改变,因为是共享同一块内存,但如果对其中一个tensor执行某些内置操作,则会报错。

uniform()

从均匀分布中抽样数值进行填充

clamp()

将输入input张量每个元素的范围限制到区间 [min,max],返回结果到一个新张量。

nn.KLDivLoss()

相对熵 = 交叉熵 - 信息熵
$$
loss(p,x)=-\sum xlog(p)-(-\sum xlog(x))
$$

  1. 信息熵是该label完美编码所需的信息量。

  2. 交叉熵是该label不完美编码(用观察值编码所需的信息量)。

  3. 相对熵是交叉熵和信息熵的差值,也就是所需额外的信息量。

  4. 分类任务

  5. 和交叉熵计算差不多,通常使用交叉熵


文章作者: Handy
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Handy !
  目录