在深度学习中,损失函数反应模型最后预测结果与实际真值之间的差异,可以用来分析训练过程的好坏、模型是否收敛等,例如均方误差、交叉熵损失等。在PyTorch中,损失函数可以看做是网络的某一层而放到模型定义中,但在实际使用时更偏向于作为功能函数放到前向传播过程中
PyTorch在torch.nn即torch.nn.functional中都提供了各种损失函数,通常来讲,由于损失函数不含有可学习的参数,因此这两者在功能上基本没有区别
>>> #在perception.py终端环境继续运行,来进一步求损失
>>> from torch import nn
>>> import torch.nn.functional as F
>>> output
tensor([[0.8806, 0.5558],
[0.9010, 0.5695],
[0.9133, 0.5829],
[0.8642, 0.5535]], grad_fn=<SigmoidBackward>)
>>> #设置标签,由于是二分类,一共有4个样本,因此标签维度为1*4,每个数为0或1两个类别
>>> label = torch.Tensor([0,1,1,0]).long()
>>> #实例化nn中的交叉熵损失
>>> criterion = nn.CrossEntropyLoss()
>>> #调用交叉熵损失
>>> loss_nn = criterion(output,label)
>>> loss_nn
tensor(0.7096, grad_fn=<NllLossBackward>)
>>> #由于F.cross_entropy是一个函数,因此可以直接调用,不需要实例化,两者求得的损失值相同
>>> loss_functional = F.cross_entropy(output,label)
>>> loss_functional
tensor(0.7096, grad_fn=<NllLossBackward>)
perception.py:添加链接描述