您现在的位置是:首页 > 正文

caffe loss 损失权重问题

2024-02-01 05:17:23阅读 3

loss有一个细节问题就是Loss weights(损失权重),用来表征不同Layer产生的loss的重要性,Layer名称中以Loss结尾表示这是一个会产生loss的Layer,其他的Layer只是单纯的用于中间计算。任何一个Layer都可以被用于产生loss反向迭代时,一个Layer可以赋予一个非零的loss weight,用于调整中间Layer产生的一些数据、参数。对于不止一个输出(top)的Layer(对应的有非零的loss weight),输出的loss是对所有输出blob的loss的和。Caffe最后输出的loss,是由Net中所有的loss加权得到的。对于loss Layer,loss_weight为非0,对于非loss Layer,loss_weight都是0所以Layer对网络loss的贡献值也为0

Pseudocode:

[cpp]  view plain  copy
  1. loss := 0  
  2. for layer in layers:  
  3.   for top, loss_weight in layer.tops, layer.loss_weights:  
  4.     loss += loss_weight * sum(top)  
这个设置在layer.hpp文件中, 一个protected函数, SetLossWeight()

[cpp]  view plain  copy
  1. /** 
  2.    * 初始化损失权重---<strong>为每个top blob设置loss weight multiplier blobs(损失权重乘子blobs)</strong>,非LossLayer的top blob的loss weight值为零 
  3.    * =====!!!! Store non-zero loss weights in the diff blob !!!!=== 
  4.    */  
  5.   inline void SetLossWeights(const vector<Blob<Dtype>*>& top) {  
  6.     const int num_loss_weights = layer_param_.loss_weight_size();//message Layerparameter中的repeated float loss_weight = 5;表示的是“The amount of weight to assign each top blob in the objective”</strong></em>  
  7.     if (num_loss_weights) {  
  8.       CHECK_EQ(top.size(), num_loss_weights) << "loss_weight must be "  
  9.           "unspecified or specified once per top blob.";  
  10.       for (int top_id = 0; top_id < top.size(); ++top_id) {  
  11.         const Dtype loss_weight = layer_param_.loss_weight(top_id);  
  12.         if (loss_weight == Dtype(0)) { continue; }  
  13.         this->set_loss(top_id, loss_weight);//修改Layer的数据成员loss_,其存储的是loss_weight  
  14.         const int count = top[top_id]->count();  
  15.         Dtype* loss_multiplier = top[top_id]->mutable_cpu_diff();//返回指向某块Blob的diff所对应的内存空间的指针,并且由于mutable_cpu_diff返回的是void*指针,还有一个类型转换过程  
  16.         caffe_set(count, loss_weight, loss_multiplier);//loss_multiplier是一个void指针,caffe_set函数表示用loss_weight初始化这块内存,使其能够存储count个loss_weight(when loss_weight!=0),if loss_weight=0,则用0值来初始化.-----这里为blob的每个元素都初始化了一个loss_weight, 那么在后面计算loss时,只要sum(top)就可以了.  
  17.       }  
  18.     }  
  19.   }  

网站文章

  • 【Linux】LINUX学习之路(学LINUX必看)

    转载自:http://blog.csdn.net/simanstar/article/details/8644437 LINUX学习之路(学LINUX必看) 红色字体为本人注释 很多同学接触Linux不多,对Linux平台的开发更是一无所知。而现在的趋势越来越表明,作为一 个优秀的软件开发人员,或计算机IT行业从业人员,掌握Linux是一种很重要的谋生资源与手段。下来我

    2024-02-01 05:17:17
  • React-native 学习笔记(三)

    关于react native 一些常见错误的积累最近在学习rn的时候碰到一些奇葩的问题,在这里总结一下,日后可以有据可查在完成所有的配置之后也就是执行了react native //项目启动react-native init AwesomeProjectcd AwesomeProjectreact-native run-ios报错: 找不到index.os文件 解决 在AwesomePro

    2024-02-01 05:17:11
  • 表单的基本结构和语法

    基本语法: ion="表单提交地址" method="提交方法"> ...文本框、按钮等表单元素 action 属性:规定当提交表单信息时,向何处发送表单数据,即处理表单数据的目标地址。如不填,默认为当前页面。method 属性:规定提交方式,聚会为"get"或"post"。"get"方式一般适用于安全性不高的场合,而"post"一般适用于安全性较高的场合。普通按钮:图片按钮: 注意,这种方式

    2024-02-01 05:16:41
  • win2008搭建文件存储服务器,Win2008文件服务之SAN存储管理器入门

    【IT168 专稿】SAN 存储管理器是新的 Microsoft 管理控制台 (MMC) 管理单元,我们可以通过它帮助创建和管理存储区域网络 (SAN) 中支持虚拟磁盘服务 (VDS) 的光纤通道磁盘...

    2024-02-01 05:16:33
  • IDEA普通JAVA项目打包成exe可执行程序【带有第三方jar依赖】

    IDEA普通JAVA项目打包成exe可执行程序【带有第三方jar依赖】

    一、项目简介该项目使用IntelliJ IDEA创建的普通JAVA项目,该项目有依赖第三库和jar包。这个项目要打成生成exe可执行程序,特此记录一下打包步骤。打包步骤主要分两步走:1.将java项目...

    2024-02-01 05:16:27
  • mysql安装

    mysql安装

    MySQL安装及设置

    2024-02-01 05:16:21
  • 浅谈前端性能优化(七)——图像优化

    1、常用的图像类型 1) gif: 适用于动画效果。 2) jpg: 使用有损压缩,将图片的每个像素分解成8*8的栅格,然后对每个栅格的数据进行压缩处理,通过特殊的算法用附近的颜色填充栅格。用户可以设置质量级别,从0到100,数字越小,图片质量越差。 3) png:使用无损压缩,将图片出现的颜色进行索引,保留在调色板上,在显示图像时会调用调色板的颜色去填充相应位置。png又分为png8、pn

    2024-02-01 05:15:51
  • 轻松通关Flink第06讲:Flink 集群安装部署和 HA 配置

    轻松通关Flink第06讲:Flink 集群安装部署和 HA 配置

    本课时我们讲解了 Flink 的三种部署模式和高可用配置,并且对这三种部署模式的适用场景进行了讲解。在生产上,我们最常用的方式当然是 Flink on Yarn,借助 Yarn 在资源管理上的绝对优势,确保集群和任务的稳定。

    2024-02-01 05:15:45
  • 谈谈hashCode()

    目录找到 hashCode()什么是nativehashCode() 与 equals()找到 hashCode()hashCode()定义在 JDK 的 Object.java 中,这就意味着 Ja...

    2024-02-01 05:15:40
  • springboot拦截请求路径_第六章:如何在SpringBoot项目中使用拦截器

    拦截器对使用SpringMvc、Struts的开发人员来说特别熟悉,因为你只要想去做好一个项目必然会用到它。拦截器在我们平时的项目中用处有很多,如:日志记录(我们后续章节会讲到)、用户登录状态拦截、安...

    2024-02-01 05:15:11