首页 > 其他 > 详细

softmax_loss的归一化问题

时间:2018-03-01 16:44:45      阅读:1706      评论:0      收藏:0      [点我收藏+]

cnn网络中,网络更新一次参数是根据loss反向传播来,这个loss是一个batch_size的图像前向传播得到的loss和除以batch_size大小得到的平均loss。

技术分享图片

softmax_loss前向传播中有这样一段代码:    loss/get_normalizer(normalization_,valid_count),这就是对loss进行归一化。

如果我有ignore_label,valid_cout就不为-1,没有就为-1。我的prototxt里面是没有的,所以最后我使用的normalizer是outer_num_ * inner_num_的形式。

实际上就是如果有ignore_label就归一化的所有的valid的,如果没有就是归一化batch×w×h

get_normalizer的定义在hpp中,实现在cpp文件中。

技术分享图片

normalization_mode传入的是normalization_,normalization_的定义在hpp,赋值实现在cpp的layer_setup里,如下图。观察我的softmax_loss没有添加loss_param,所以就是默认的valid模式。

技术分享图片

normalization_的赋值来自于layer的loss参数,如下图所示。这里有normalization和normalize两个参数,默认的normalization是valid类型,normalize是bool型无默认值。从上面一个图和下一个图的解释可以看出,没有normalization的情况,normalize为true就是valid,为false就是batch_size,其他情况都是由normalization来决定。也就是说normalize既可以不存在,也可以存在为true,存在为false。

技术分享图片

 

 

 

注意结合.h、.cpp、.cu一起看代码

softmax_loss的归一化问题

原文:https://www.cnblogs.com/ymjyqsx/p/8488251.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!