Pytorch中CrossEntropyLoss计算的是样本损失均值

假设一个三分类任务,单个batch的inputs为[5, 3, 25, 25],数据为5张25*25的三通道RGB图片,其标签为[1, 0, 0, 2, 1]。那么nn.CrossEntropyLoss计算的是model输出结果中多个样本的loss均值。因此在计算epoch的loss时,要用loss_epoch除以batch个数而不是样本总数。
相比较而言,acc则不同。

那么,accuracy的计算也就是在整个train_loader的for循环中(步数),把每个mini_batch中判断正确的个数累加起来,然后除以样本总数就行了;
而loss的计算有讲究了,首先在这里我们是计算交叉熵,关于交叉熵,也就是涉及到两个值,一个是模型给出的logits,也就是10个类,每个类的概率分布,另一个是样本自身的
label,在Pytorch中,只要把这两个值输进去就能计算交叉熵,用的方法是nn.CrossEntropyLoss,这个方法其实是计算了一个minibatch的均值了,因此累加以后需要除以的步数,也就是minibatch的个数,而不是像accuracy那样是样本个数,这一点非常重要。
摘自嶙羽-关于Pytorch中accuracy和loss的计算
参考:

  1. Pytorch详解NLLLoss和CrossEntropyLoss

你可能感兴趣的:(pytorch)