在 Pytorch 中添加损失时,我在 torch.nn.Functional 和 torch.nn 中具有相同的功能。有什么区别?
torch.nn.CrossEntropyLoss()
和 torch.nn.functional.cross_entropy
从 PyTorch 讨论论坛中放入相同的文本@Alban D 已经给出了类似问题的答案。
F.cross entropy 与 torch.nn.Cross_Entropy_Loss
损失没有太大区别。
和nn.functional.xxx
之间的主要区别在于,一个有状态,一个没有。nn.Xxx
这意味着,例如,对于线性层,如果您使用函数版本,您将需要自己处理权重(包括将它们传递给优化器或将它们移动到 GPU),而版本将完成所有这些工作为您提供nn.Xxx
或.parameters()
。.to(device)
对于损失函数,由于(一般情况下)不需要参数,所以你不会发现太大的差异。例如,如果您在类之间使用交叉熵和一些权重,则使用
模块,您将在创建模块时仅给出一次权重,然后使用它。如果您使用的是功能版本,则每次使用时都需要传递权重。nn.CrossEntropyLoss()