你的浏览器禁用了JavaScript, 请开启后刷新浏览器获得更好的体验!
输入关键字进行搜索
搜索:
没有找到相关结果
孙琳钧
赞同来自: xinmiao 、ruirui_ICT 、李扬 、zeakey 、uestc_yang 、风林火山 、cjwdeq 、phoenixbai 、fipan更多 »
刘昕_ICT
赞同来自: caney
disheng
赞同来自:
要回复问题请先登录或注册
3 个回复
孙琳钧
赞同来自: xinmiao 、ruirui_ICT 、李扬 、zeakey 、uestc_yang 、风林火山 、cjwdeq 、phoenixbai 、fipan更多 »
刘昕_ICT
赞同来自: caney
/*const int num = bottom[0]->num();
// Stable version of loss computation from input data
const Dtype* input_data = bottom[0]->cpu_data();
const Dtype* target = bottom[1]->cpu_data();
Dtype loss = 0;
for (int i = 0; i < count; ++i) {
loss -= input_data[i] * (target[i] - (input_data[i] >= 0)) -
log(1 + exp(input_data[i] - 2 * input_data[i] * (input_data[i] >= 0)));
}
top[0]->mutable_cpu_data()[0] = loss / num;*/
const Dtype* sigmoid_output_data = sigmoid_output_->cpu_data();
const Dtype* target = bottom[1]->cpu_data();
Dtype* bottom_diff = bottom[0]->mutable_cpu_diff();
caffe_sub(count, sigmoid_output_data, target, bottom_diff);
Dtype loss = caffe_cpu_asum(count, bottom_diff);
top[0]->mutable_cpu_data()[0] = loss / count;
相当于平均L1范误差,从此生活变的更美了。
disheng
赞同来自:
loss -= input_data * (target - (input_data >= 0)) -
log(1 + exp(input_data - 2 * input_data * (input_data >= 0)))
实际上,当input_data>=0 和input_data<0时,两个表达式在数学上是等价的,之所以这么写是为了让e的指数为负数,以防止溢出。
计算损失的表达式只要用cross entropy公式带入就能够推导出来,需要注意的是input_data是计算sigmoid函数之前的变量,即loss = target*ln(s(input_data))+(1-target)*ln(1-s(input_data)),其中s表示sigmoid函数,ln表示自然对数。