# Pytorch 中可以直接调用的Loss Functions总结:(三)
COSINEEMBEDDINGLOSS
余弦相似度损失函数,用于判断输入的两个向量是否相似。 常用于非线性词向量学习以及半监督学习。
loss函数之CosineEmbeddingLoss,HingeEmbeddingLoss_ltochange的博客-CSDN博客_余弦相似度损失函数
MultiLabelMarginLoss
多分类合页损失函数(hinge loss),对于一个样本不是考虑样本输出与真实类别之间的误差,而是考虑对应真实类别与其他类别之间的误差
loss函数之MultiMarginLoss, MultiLabelMarginLoss_ltochange的博客-CSDN博客
使用:
loss = nn.MultiLabelMarginLoss() x = torch.FloatTensor([[0.1, 0.2, 0.4, 0.8]]) # for target y, only consider labels 3 and 0, not after label -1 y = torch.LongTensor([[3, 0, -1, 1]]) loss(x, y) # 0.25 * ((1-(0.1-0.2)) + (1-(0.1-0.4)) + (1-(0.8-0.2)) + (1-(0.8-0.4)))
HuberLoss
回归损失函数:Huber Loss_Peanut_范的博客-CSDN博客_huber loss
一个损失函数,y是真实值,f(x)是预测值,δ是HuberLoss的参数,当预测偏差小于δ时,它采用平方误差,当预测偏差大于δ,采用线性误差。相比于最小二乘的线性回归,Huber Loss降低了对异常点的惩罚程度,是一种常用的robust regression的损失函数
SmoothL1Loss
创建一个条件,如果绝对元素误差低于 beta,则使用平方项,否则使用 L1 项。它对异常值的敏感度低于torch.nn.MSELoss,并且在某些情况下可以防止梯度爆炸(例如,参见Ross Girshick的论文Fast R-CNN)。
SoftMarginLoss
loss函数之SoftMarginLoss - 简书 (jianshu.com)
MultiLabelSoftMarginLoss
MultiLabelSoftMarginLoss函数_Coding-Prince的博客-CSDN博客_multilabelsoftmarginloss
MULTIMARGINLOSS
多分类合页损失函数(hinge loss),对于一个样本不是考虑样本输出与真实类别之间的误差,而是考虑对应真实类别与其他类别之间的误差
loss函数之MultiMarginLoss, MultiLabelMarginLoss_旺旺棒棒冰的博客-CSDN博客
使用:
loss = nn.MultiMarginLoss() x = torch.tensor([[0.1, 0.2, 0.4, 0.8]]) y = torch.tensor([3]) loss(x, y) # 0.25 * ((1-(0.8-0.1)) + (1-(0.8-0.2)) + (1-(0.8-0.4)))
TripletMarginLoss
PyTorch TripletMarginLoss(三元损失)_zj134_的博客-CSDN博客_pytorch 三元组损失
TripletMarginWithDistanceLoss
loss函数之TripletMarginLoss与TripletMarginWithDistanceLoss_ltochange的博客-CSDN博客
nn.xx 与 nn.functional .xx区别:
参考回答:
作者:肥波喇齐
链接:https://www.zhihu.com/question/66782101/answer/579393790
我们经常看到,二者有很多相同的loss函数,他们使用时有什么区别呢?
两者的相同之处:
nn.Xxx和nn.functional.xxx的实际功能是相同的,即nn.Conv2d和nn.functional.conv2d 都是进行卷积,nn.Dropout 和nn.functional.dropout都是进行dropout,。。。。。;
运行效率也是近乎相同。
nn.functional.xxx是函数接口,而nn.Xxx是nn.functional.xxx的类封装,并且**nn.Xxx都继承于一个共同祖先nn.Module。**这一点导致nn.Xxx除了具有nn.functional.xxx功能之外,内部附带了nn.Module相关的属性和方法,例如train(), eval(),load_state_dict, state_dict 等。
什么时候使用nn.functional.xxx,什么时候使用nn.Xxx?
这个问题依赖于你要解决你问题的复杂度和个人风格喜好。在nn.Xxx不能满足你的功能需求时,nn.functional.xxx是更佳的选择,因为nn.functional.xxx更加的灵活(更加接近底层),你可以在其基础上定义出自己想要的功能。
个人偏向于在能使用nn.Xxx情况下尽量使用,不行再换nn.functional.xxx ,感觉这样更能显示出网络的层次关系,也更加的纯粹(所有layer和model本身都是Module,一种和谐统一的感觉)。
一点导致nn.Xxx除了具有nn.functional.xxx功能之外,内部附带了nn.Module相关的属性和方法,例如train(), eval(),load_state_dict, state_dict 等。
什么时候使用nn.functional.xxx,什么时候使用nn.Xxx?
这个问题依赖于你要解决你问题的复杂度和个人风格喜好。在nn.Xxx不能满足你的功能需求时,nn.functional.xxx是更佳的选择,因为nn.functional.xxx更加的灵活(更加接近底层),你可以在其基础上定义出自己想要的功能。
个人偏向于在能使用nn.Xxx情况下尽量使用,不行再换nn.functional.xxx ,感觉这样更能显示出网络的层次关系,也更加的纯粹(所有layer和model本身都是Module,一种和谐统一的感觉)。
相关文章
- Python3 常用日期计算方法
- 为什么大多数团队推行自动化测试最后却不了了之?
- 软件测试|Python字符串的这些操作,你可都学会了?
- python可视化 | 绘制中国降雨分布(添加等高线、比例尺、指南针、南海诸岛、九段线)
- 如何用Python和Selenium轻松获取英语动词变位表格
- 100行Pytorch代码实现三维重建技术神经辐射场 (NeRF)
- 【保姆级】Python最新版3.11.1开发环境搭建,看这一篇就够了
- 【基于ChatGPT+Python】快速打造前后端分离的OpenAI人工智能聊天机器人
- 5个步骤搞定protoc环境安装
- 千万不要错过的后端【纯干货】面试知识点整理 I I
- 工作中后端是如何将API提供出去的?swaggo很不错
- 《Python程序设计基础与应用(第2版)》课后习题参考答案
- 文件格式引起的脚本执行错误
- springboot 静态方法中使用@Autowired注入配置和Bean
- JMeter笔记17 | JMeter逻辑控制器简介
- 多行命令并行管理,只需要一个脚本
- SpringBoot集成Quartz(定时任务)
- 使用python的随机森林算法处理遥感数据
- Python selenium
- python 进程与线程