假设caffe中神经网络的输出是大小为w x h的图像。 假设我正在使用大小为N的批量大小。
我是否正确假设欧几里德损失(由标准caffe层计算)总和所有w x h值的平方误差,平方根,然后平均值超过批量大小N?
也就是说,它不是在w x h值上的平均值?
谢谢。
PS:有没有办法在堆栈溢出中使用数学环境?
答案 0 :(得分:2)
根据代码,它没有对w x h值进行平均,并且也没有使用平方根。它只对批量大小N进行平均,然后除以2。
template <typename Dtype>
void EuclideanLossLayer<Dtype>::Forward_cpu(const vector<Blob<Dtype>*>&bottom,const vector<Blob<Dtype>*>& top) {
int count = bottom[0]->count();
caffe_sub(count,
bottom[0]->cpu_data(),
bottom[1]->cpu_data(),
diff_.mutable_cpu_data());
Dtype dot = caffe_cpu_dot(count, diff_.cpu_data(), diff_.cpu_data());
Dtype loss = dot / bottom[0]->num() / Dtype(2);
top[0]->mutable_cpu_data()[0] = loss;
}