L1 Loss(Mean Absolute Error,MAE)
pytorch代码:
torch.nn.L1Loss()
L2 Loss(Mean Squared Error,MSE)
pytorch代码:
torch.nn.MSELoss()
L1Loss和MSELoss的参数:
旧版的函数有reduce、size_average两个参数,新版的只有一个reduction参数了,功能是一样的。
reduction的意思是维度要不要缩减,以及怎么缩减,有三个选项:
- none:不要压缩,如果参数值为none,那么损失值与输入值的维度相同
- mean:求平均值,为求和后再除以所有维度的乘积
- sum:求和
公式及优缺点参考:
https://blog.csdn.net/Xiaobai_rabbit0/article/details/111032136
交叉熵损失
loss = torch.nn.CrossEntropyLoss()
l = loss(y_hat, y)
这里的y_hat是一个向量,测试时可以得到独热码,而标签为一个数。y_hat并没有经过softmax,而是在计算损失的同时进行softmax。
RuntimeError: bool value of Tensor with more than one value is ambiguous
nn.CrossEntropyLoss() 是一个类,应该先行进行实例化。写代码时候粗心会导致这个错误,但是又不容易察觉出来。
预测size为 (batch classes), classes为类别数,不需要进行argmax和softmax,
标签size为(batch)