Caffe的L2 loss层的源码问题

template <typename Dtype>
void EuclideanLossLayer<Dtype>::Backward_cpu(const vector<Blob<Dtype>*>& top,
const vector<bool>& propagate_down, const vector<Blob<Dtype>*>& bottom) {
for (int i = 0; i < 2; ++i) {
if (propagate_down[i]) {
const Dtype sign = (i == 0) ? 1 : -1;
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
}
}
}

Caffe 的euclidean_loss_layer.cpp中的backward函数,里面的alpha计算的时候乘上了一项
top[0]->cpu_diff()[0],是什么呢
已邀请:

phoenixbai

赞同来自: 孙琳钧 caffe

每个Loss layer都有个对应的loss_weight,默认是1,若网络设置了多个需要学习的Loss layer,则可以通过loss_weight参数设置各个loss layer的权重。
这个loss_weight的值,就存在top[0]->cpu_diff[0]里。是在Layer初始化时从prototxt文件里读取用户设置的值来存储到top[0]->cpu_diff[0]里。
 
官文里有说明:http://caffe.berkeleyvision.org/doxygen/classcaffe_1_1EuclideanLossLayer.html#a577f5dad9889d01461348a4c89277089 
 
thanks

要回复问题请先登录注册