yolov3算法中关于loss={‘yolo_loss’: lambda y_true, y_pred: y_pred}的理解

参考文献:
(1)https://www.jianshu.com/p/7e45586c44be
(2)https://blog.csdn.net/wangdongwei0/article/details/82563689?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task
(3)https://kexue.fm/archives/4493

所用的yolov3代码: https://github.com/qqwweee/keras-yolo3 ,解压之后用pycharm打开。

在train.py中有如下代码,对模型进行编译:

    if True:model.compile(optimizer=Adam(lr=1e-3), loss={# use custom yolo_loss Lambda layer.'yolo_loss': lambda y_true, y_pred: y_pred})

刚开始对 loss={‘yolo_loss’: lambda y_true, y_pred: y_pred})不理解,通过查看相关博客,个人理解如下:
首先查看 Keras中的目标函数(损失函数)的定义方法(路径是keras→losses.py):

def mean_squared_error(y_true, y_pred):return K.mean(K.square(y_pred - y_true), axis=-1)def mean_absolute_error(y_true, y_pred):return K.mean(K.abs(y_pred - y_true), axis=-1)def mean_absolute_percentage_error(y_true, y_pred):diff = K.abs((y_true - y_pred) / K.clip(K.abs(y_true),K.epsilon(),None))return 100. * K.mean(diff, axis=-1)

可以发现y_true, y_pred是标准的函数输入参数,一个代表真实值(标签),一个代表预测值,函数返回的是即为预测值与真实值的某种误差函数。

但yolov3算法中,将loss函数写成一个Lambda层了,即该层的输出就是模型的loss值,也就是模型的预测值 y_pred.

model_loss = Lambda(yolo_loss, output_shape=(1,), name='yolo_loss',arguments={'anchors': anchors, 'num_classes': num_classes, 'ignore_thresh': 0.5})([*model_body.output, *y_true])

因此,模型compile时传递的是自定义的loss,自定义的方法是使用Python里的匿名函数,即 lambda y_true, y_pred: y_pred, 其中,该匿名函数的输入参数是y_true, y_pred: y_pred,代表模型的真实值和预测值,该匿名函数的返回值是y_pred,即模型的预测值,该预测值正是loss值。
对于loss={‘yolo_loss’: lambda y_true, y_pred: y_pred}中的’yolo_loss’,参考以下文献就明白了:
https://keras-zh.readthedocs.io/getting-started/functional-api-guide/
https://blog.csdn.net/xiaohuihui1994/article/details/81022043
我的理解是凡是在字典中的键,如loss={‘yolo_loss’: lambda y_true, y_pred: y_pred}中的’yolo_loss’,loss_weights={‘main_output’: 1., ‘aux_output’: 0.2})中的’main_output’,model.fit({‘main_input’: headline_data, ‘aux_input’: additional_data}, {‘main_output’: headline_labels, ‘aux_output’: additional_labels},epochs=50, batch_size=32)中的’main_input’、'aux_input’等,都是在在定义层时传递的一个 name 参数,即
model_loss = Lambda(yolo_loss, output_shape=(1,), name=‘yolo_loss’,
arguments={‘anchors’: anchors, ‘num_classes’: num_classes, ‘ignore_thresh’: 0.5})(
[*model_body.output, *y_true]) 中的name=‘yolo_loss’ 。

    if True:model.compile(optimizer=Adam(lr=1e-3), loss={# use custom yolo_loss Lambda layer.'yolo_loss': lambda y_true, y_pred: y_pred})

yolov3算法中关于loss={'yolo_loss': lambda y_true, y_pred: y_pred}的理解相关推荐

  1. tensorflow2中自定义损失、传递loss函数字典/compile(optimizer=Adam(lr = lr), loss= lambda y_true, y_pred: y_pred)理解

    在阅读yolov3代码的时候有下面这样一样代码: model.compile(optimizer=Adam(lr = lr), loss={'yolo_loss': lambda y_true, y_ ...

  2. DL之Yolov3:基于深度学习Yolov3算法实现视频目标检测之对《我要打篮球》视频段进行实时目标检测

    DL之Yolov3:基于深度学习Yolov3算法实现视频目标检测之对<我要打篮球>视频段进行实时目标检测 目录 输出结果 设计思路 核心代码 相关文章 成功解决AttributeError ...

  3. MXNet/Gluon 中 Triplet Loss 算法

    Triplet Loss,即三元组损失,用于训练差异性较小的数据集,数据集中标签较多,标签的样本较少.输入数据包括锚(Anchor)示例⚓️.正(Positive)示例和负(Negative)示例,通 ...

  4. TensorFlow2实现协同过滤算法中的矩阵分解(首家基于TS2版本)

    目标: 用TensorFlow2,实现协同过滤算法中的矩阵分解.网上找的绝大部分是基于一个模板复制出来的,且基于TensorFlow1,因此本人亲自动手,用TensorFlow2实现. 好奇为什么Te ...

  5. yolov3算法优点缺点_优点缺点

    yolov3算法优点缺点 Naive Bayes: A classification algorithm under a supervised learning group based on Prob ...

  6. 【深度学习】目标检测之YOLOv3算法

    [深度学习]目标检测之YOLOv3算法 YOLO系列目标检测算法官方代码 YOLOv3 网络结构 anchor的编解码 损失函数 binary cross-entropy loss AP(Averag ...

  7. 毕业设计(三)-- 基于YOLOV3算法的指针式仪表表盘检测

    YOLOV3 作为无需区域提名的目标检测算法中的代表算法,可以很好地适应基于视频流的指针式仪表检测任务,能够准确地从复杂生产环境中检测识别出指针式仪表并返回其位置信息,结合OpenCV 就可以从视频流 ...

  8. CTR 预测理论(九):Boosting 集成算法中 Adaboost, GBDT 与 XGBoost 的区别

    https://blog.csdn.net/Dby_freedom/article/details/81975255 最近总结树模型,尝试将主流 Boosting 实现方式做一个分析汇总,文中部分内容 ...

  9. pytorch中网络loss传播和参数更新理解

    相比于2018年,在ICLR2019提交论文中,提及不同框架的论文数量发生了极大变化,网友发现,提及tensorflow的论文数量从2018年的228篇略微提升到了266篇,keras从42提升到56 ...

最新文章

  1. 测试一下,你能小学毕业吗?
  2. 2019成考计算机几时出成绩,2019年成人高考成绩什么时候出来?如何查询
  3. Fragment的setUserVisibleHint方法实现懒加载
  4. 若兰-nvjdc 1.3新版本安装及老版本升级教程
  5. CSS3中的动画效果记录
  6. 精品家具办公桌椅企业html5官网模板
  7. Kaggle泰坦尼克数据科学解决方案
  8. 服务器维护 文档,ERP系统维护服务器维护管理文档.docx
  9. 时间和日期的JS库Day.js入门教程
  10. Creo曲面基础知识
  11. PR曲线、ROC曲线、AUC、AP简单梳理
  12. 案例推荐《微博:随时随地迎战大流量》
  13. 五脏与五声 五脏排毒法(五声功)
  14. uniapp:广告API使用总结
  15. 服务器虚拟机uefi,为虚拟机启用或禁用 UEFI 安全引导
  16. C#解析JSON几种方式
  17. 软妹子之心,智能硬汉子们可懂?
  18. 多个路由器设置静态路由 不同网段可以互相访问
  19. RealView MDK 使用
  20. 计算机安装重装出现错误,电脑重装系统老是失败要怎么办?我教你几个方法,一定能装上去!...

热门文章

  1. WJMZBMR在成都赛区开幕式上的讲话
  2. 把excel中的数据粘贴到oracle
  3. 微信小程序input框中加入小图标的实现方法
  4. Muv-Luv Alternative分析文档 Part 〇—四
  5. 值得一看的35个Redis常用问题总结
  6. linq使用Take和Skip实现分页
  7. 华为 eNSP 模拟器配置动态路由(RIP)
  8. 无监督学习算法Autoencoder
  9. E+H浊度仪维修CUE22-A1A浊度分析仪维修概述
  10. Ubuntu安装配置06|安装配置文本编辑器Sublime Text