咖啡中的欧几里得损失层
Euclidean Loss Layer in Caffe
我目前正在尝试在caffe中实现我自己的损失层,在尝试实现的同时,我使用其他层作为参考。然而,有一件事让我感到困惑,那就是top[0]->cpu_diff()
在Backward_cpu
中的使用。我将使用EuclideanLossLayer
作为参考。以下是我的问题
-
据我所知,
top[0]->cpu_diff()
保存下一层的误差导数,但如果没有其他层,它是如何初始化的呢?因为它在EuclideanLossLayer
中使用而不执行任何检查:const Dtype alpha = sign * top[0]->cpu_diff()[0] / bottom[i]->num();
-
同样,在
EuclideanLossLayer
中,使用以下代码片段计算关于激活的误差导数:const Dtype alpha = sign * top[0]->cpu_diff()[0] / bottom[i]->num(); caffe_cpu_axpby( bottom[i]->count(), // count alpha, // alpha diff_.cpu_data(), // a Dtype(0), // beta bottom[i]->mutable_cpu_diff()); // b
如果我的第一个假设是正确的,并且
top[0]->cpu_diff()
确实保持了上面层的误差导数,为什么我们只使用第一个元素,即top[0]->cpu_diff()[0]
,而不是乘以整个向量,即top[0]->cpu_diff()
?
对于损失层,没有下一层,因此顶部的diff blob在技术上是未定义和未使用的,但Caffe正在使用这个预先分配的空间来存储不相关的数据:Caffe支持将损失层乘以用户定义的权重(prototxt中的loss_weight),该信息(单个标量浮点数)存储在顶部blob的diff数组的第一个元素中。这就是为什么你会在每个损失层中看到,它们乘以这个数量来支持该功能。这在Caffe关于损失层的教程中有解释。
该权重通常用于增加网络的辅助损耗。你可以在谷歌的《Convolations Going Deeper》或《深度监管的篮网》中阅读更多关于它的信息。
相关文章:
- 在C++中,如何通过几种类型从元组中选择多个元素
- 使用内在指令的欧几里得距离
- 如何在不导致堆栈溢出的情况下计算非常大的数字和很小的 HCF.我正在使用欧几里得算法
- 咖啡馆欧几里得损失计算超过图像
- 本玄C++;欧几里得变换与特征::变换
- 如何在OpENCV中的图像中找到像素之间的欧几里得距离
- 使用欧几里得公式求全毕达哥拉斯三元组
- 将欧几里得转换为C 和OpenCV中的均匀空间
- 欧几里得的扩展算法C++
- C++中的欧几里得整数模
- 实现欧几里得除法,根据两个正整数的线性组合编写这两个正整数的最大公约数
- 使用欧几里得算法找到GCF(GCD)
- 在 GPU 上计算欧几里得距离矩阵的平方
- 在 c++ 中扩展欧几里得算法的递归中究竟发生了什么?
- 使用 int 数组作为键的二叉树(欧几里得距离)
- 欧几里得算法函数参数
- 寻找毕达哥拉斯三元组:欧几里得公式
- 使用欧几里得算法识别两个值的最大公约数 (GCD)
- 在CUDA中计算2个矩阵之间的欧几里德距离
- 咖啡中的欧几里得损失层