【发布时间】:2015-09-14 22:41:36
【问题描述】:
我目前正在尝试在 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中,使用以下代码 sn-p 计算关于激活的误差的导数: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()?
【问题讨论】:
标签: c++ deep-learning caffe