smooth l1(huber)+binary cross entropy详解(tensorflow+pytorch)
前言
上篇讲到yolo v2 loss中使用了两个loss分别时wh使用的smoothl1 loss以及其他的BCEloss,这里做个扩展介绍,并对比pytorch以及tensorflow的api接口的使用
smooth l1(huber loss)
转载自知乎高赞回答:https://www.jianshu.com/p/19483787fa24
smooth L1 loss能从两个方面限制梯度:
- 当预测框与 ground truth 差别过大时,梯度值不至于过大;
- 当预测框与 ground truth 差别很小时,梯度值足够小。
考察如下几种损失函数,其中
损失函数对 x 的导数分别为:
观察 (4),当 x 增大时 L2 损失对 x 的导数也增大。这就导致训练初期,预测值与 groud truth 差异过于大时,损失函数对预测值的梯度十分大,训练不稳定。
根据方程 (5),L1 对 x 的导数为常数。这就导致训练后期,预测值与 ground truth 差异很小时, L1 损失对预测值的导数的绝对值仍然为 1,而 learning rate 如果不变,损失函数将在稳定值附近波动,难以继续收敛以达到更高精度。
最后观察 (6),smooth L1 在 x 较小时,对 x 的梯度也会变小,而在 x 很大时,对 x 的梯度的绝对值达到上限 1,也不会太大以至于破坏网络参数。 smooth L1 完美地避开了 L1 和 L2 损失的缺陷。其函数图像如下:
由图中可以看出,它在远离坐标原点处,图像和 L1 loss 很接近,而在坐标原点附近,转折十分平滑,不像 L1 loss 有个尖角,因此叫做 smooth L1 loss。
pytorch及tensorflow接口
pytorch:
import torch.nn as nn
smooth_l1 = nn.SmoothL1Loss(reduce=False)
loss = smooth_l1(coord_wh, tcoord_wh))
tensorflow:
#reduction参数默认返回sum值,若要返回同shape的矩阵则传入NONE
loss = tf.losses.huber_loss(gt_coord_wh, pre_coord_wh, reduction=tf.losses.Reduction.NONE)
各参数含义见:https://www.w3cschool.cn/tensorflow_python/tensorflow_python-2cbn2wyj.html
smooth l1(huber)+binary cross entropy详解(tensorflow+pytorch)相关推荐
- 快速理解binary cross entropy 二元交叉熵
Binary cross entropy 二元交叉熵是二分类问题中常用的一个Loss损失函数,在常见的机器学习模块中都有实现.本文就二元交叉熵这个损失函数的原理,简单地进行解释. 首先是二元交叉熵的公 ...
- Binary Cross Entropy真的适合多标签分类吗?
个人曾在负责一个多标签文本分类项目时对于多标签分类(multi-label classification)的loss选择.forward尾层处理感到迷惑,当时查找了一下资料确定了一种方案: 1.以类别 ...
- tensorflow对应的python版本_详解Tensorflow不同版本要求与CUDA及CUDNN版本对应关系
参考官网地址: Windows端:https://tensorflow.google.cn/install/source_windows CPU Version Python version Comp ...
- 【小白学PyTorch】13.EfficientNet详解及PyTorch实现
<<小白学PyTorch>> 小白学PyTorch | 12 SENet详解及PyTorch实现 小白学PyTorch | 11 MobileNet详解及PyTorch实现 小 ...
- 【小白学PyTorch】12.SENet详解及PyTorch实现
<<小白学PyTorch>> 小白学PyTorch | 11 MobileNet详解及PyTorch实现 小白学PyTorch | 10 pytorch常见运算详解 小白学Py ...
- Python实战——VAE的理论详解及Pytorch实现
参考的论文: Tutorial on Variational Autoencoders Auto-Encoding Variational Bayes 建议参考的文章: Pytorch里的CrossE ...
- 代码详解|tensorflow实现 聊天AI--PigPig养成记(1)
Chapter1.代码详解 完整代码github链接,Untitled.ipynb文件内. [里面的测试是还没训练完的时候测试的,今晚会更新训练完成后的测试结果] 修复了网上一些代码的bug,解决了由 ...
- 【小白学PyTorch】11.MobileNet详解及PyTorch实现
<<小白学PyTorch>> 小白学PyTorch | 10 pytorch常见运算详解 小白学PyTorch | 9 tensor数据结构与存储结构 小白学PyTorch | ...
- tensorflow打印模型结构_社区分享 | 详解 TensorFlow 中 Placement 的最后一道防线 — Placer 算法...
本文作者王思宇,阿里巴巴算法专家,从事深度学习算法平台建设,TensorFlow 分布式架构设计与大规模分布式性能优化工作,开源 TensorFlow 项目 contributor. 本文转自:互联网 ...
最新文章
- 【数据结构与算法】图论基础与图存储结构
- #41 最短路(分治+线性基)
- JavaScript——jQuery AJAX链式编程(流式编程)DEMO
- Linux之Debian下安装LAMP apt-get安装方式
- python 图片旋转角度_OpenCV获取图像的旋转角度
- apk ionic 破损_cordova – ionic build android不生成任何.apk文件或错误
- C++工作笔记-getter/setter方法中大佬的风格
- 利用CSS按比例缩小图片
- 伏安特性曲线实验报告_【鼎阳硬件智库原创 | 测试测量】动手测量电解电容器的阻抗频率特性...
- 通过swagger下载的文件乱码解决方法,求解
- kuangbin线段树专题
- 鹅厂开源框架tars之基础组件
- 51nod - 1378 - 夹克老爷的愤怒
- 最简单的Hopper Disassembler玩转Mac逆向
- 去面试了几家BATJ等N家互联网大厂
- VRChat简易教程4-使用VRC的接口实现物体的移动(VRC的action和trigger接口)
- 用墨刀做出的交互动效,10个优秀作品欣赏
- 基于OpenCV的人脸识别自助商店(源码&部署视频)
- 技术专有名词缩写整理
- ## YARN运行资源配置