python - PyTorch 中的运行损失是什么以及如何计算
问题描述
我查看了 PyTorch 文档中的本教程以了解迁移学习。有一句我没听懂。
使用 计算损失后,使用 计算loss = criterion(outputs, labels)
运行损失running_loss += loss.item() * inputs.size(0)
,最后使用 计算历元损失running_loss / dataset_sizes[phase]
。
不loss.item()
应该用于整个小批量(如果我错了,请纠正我)。即,如果batch_size
是 4,loss.item()
将给出整个 4 图像集的损失。如果这是真的,为什么在计算时loss.item()
要乘以?在这种情况下,这一步不是像额外的乘法吗?inputs.size(0)
running_loss
任何帮助,将不胜感激。谢谢!
解决方案
这是因为由CrossEntropy
或其他损失函数给出的损失除以元素的数量,即mean
默认情况下减少参数。
torch.nn.CrossEntropyLoss(weight=None, size_average=None, ignore_index=-100, reduce=None, reduction='mean')
因此,loss.item()
包含整个小批量的损失,但除以批量大小。这就是为什么在计算 时loss.item()
乘以由 给出的批量大小。inputs.size(0)
running_loss
推荐阅读
- angular - 在 Angular 服务中,假设 map 函数在 Observable 内部使用时保证是同步的是否正确?
- sql - 执行时出现此错误无法绑定多部分标识符“TMaterials.intMaterialID”
- ios - 如何将类型“[ViewController.answer]”的值分配给另一个视图控制器的类型答案?
- python - 如何在线程定时器中传递参数?
- vue.js - 如何将组件中的值绑定到 App.vue 中的元素?
- javascript - 在场景轴上旋转,而不是对象
- linux - 无法使用 Kali Linux 在终端中保存 Nmap 输出
- reactjs - 未捕获的 TypeError:React.createClass 不是函数异常
- vba - Excel VBA:根据单元格值更改网址
- php - 将 jQuery setInterval 计时转换为递归 setTimeout 计时