python自定义损失函数_Pytorch如何自定义损失函数(Loss Function)?

vector的回答已经比较详细地介绍了自己写pytorch 里loss function 的方法。但是在你自己去定义loss function前需要明白pytorch的自动求导机制,从而避免很多问题。

1.你想用的loss function究竟能不能作为loss function来监督学习。很多时候我们想要让test的结果适应与你的metric,那么第一想法是我直接拿评价标准作为loss呗,譬如图像超分辨用MSE训练,用PSNR测试,这是可行的,因为他们“可导”。但是很多时候,任务的评价标准是复杂的,里面可能有阈值设定、统计操作,你希望直接用这个评价标准做loss并不一定可行,它不可导。

2.了解torch的求导机制(autograd)。用pytorch训练时,似乎只用加个requires_grad=True网络就什么都给我们算了,但是往往我们自己去写loss function时会存在loss没有grad_fn的情况,那么你需要了解torch里的结构图、张量、叶子节点等有关torch是如何完成自动求导过程的。可以参考如下回答:xiaopl:PyTorch 的 Autograd​zhuanlan.zhihu.com

这也是@vector三种写loss function方法里为什么有的需要自己写backward有的只用定义forward的原因,以及为什么最好用torch的运算而不要转成numpy的原因,因为要保证tensor在“管道”里流动。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值