Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Neural network 根据“按比例计算损失值”;“坏”;咖啡馆_Neural Network_Deep Learning_Caffe_Conv Neural Network - Fatal编程技术网

Neural network 根据“按比例计算损失值”;“坏”;咖啡馆

Neural network 根据“按比例计算损失值”;“坏”;咖啡馆,neural-network,deep-learning,caffe,conv-neural-network,Neural Network,Deep Learning,Caffe,Conv Neural Network,我想根据训练期间“当前预测”与“正确标签”之间的距离来缩放每个图像的损失值。例如,如果正确的标签是“猫”,而网络认为它是“狗”,那么惩罚(损失)应该比网络认为它是“车”的情况要小 我的做法如下: 1-我定义了标签之间距离的矩阵, 2-将该矩阵作为底部传递到“softmaxWithLoss”层, 3-将每个日志(prob)乘以该值,以根据forward\u cpu中的不良情况缩放损失 但是,我不知道在backward\u cpu部分应该做什么。我知道梯度(底部差异)必须改变,但不太确定如何在这里合

我想根据训练期间“当前预测”与“正确标签”之间的距离来缩放每个图像的损失值。例如,如果正确的标签是“猫”,而网络认为它是“狗”,那么惩罚(损失)应该比网络认为它是“车”的情况要小

我的做法如下:

1-我定义了标签之间距离的矩阵,
2-将该矩阵作为底部传递到
“softmaxWithLoss”
层,
3-将每个日志(prob)乘以该值,以根据
forward\u cpu中的不良情况缩放损失

但是,我不知道在
backward\u cpu
部分应该做什么。我知道梯度(底部差异)必须改变,但不太确定如何在这里合并比例值。根据数学,我必须按比例缩放梯度(因为它只是一个比例),但不知道如何缩放

此外,如果我没有弄错的话,caffe中似乎有一个名为
“InfoGainLoss”
的loosLayer,它的工作非常类似,但是该层的后面部分有点混乱:

bottom_diff[i * dim + j] = scale * infogain_mat[label * dim + j] / prob;
我不知道为什么
infogain\u mat[]
prob
除,而不是被乘!如果我对
infogain\u mat
使用单位矩阵,它在向前和向后两个方向上的行为不应该像softmax loss一样吗


如果有人能给我一些建议,我将不胜感激。

您正确地观察到您对
日志(prob)
所做的缩放正是
“InfogainLoss”
层所做的(您可以阅读更多关于它的信息,并了解更多)

至于导数(后支柱):该层计算的损失为

L = - sum_j infogain_mat[label * dim + j] * log( prob(j) )
如果您根据
prob(j)
(这是该层的输入变量)来区分此表达式,您会注意到
log(x)
的导数是
1/x
,这就是您看到的原因

dL/dprob(j) = - infogain_mat[label * dim + j] / prob(j) 
现在,为什么在
“SoftmaxWithLoss”
层的背面道具中看不到类似的表达方式?
正如该层的名称所示,它实际上是两个层的组合:从分类器输出计算类概率的softmax和它上面的日志丢失层。将这两层结合起来,可以在数值上更稳健地估计梯度。
稍微使用
“InfogainLoss”
层,我注意到有时候
prob(j)
的值很小,导致梯度估计不稳定

以下是关于原始预测(
x
)的
“SoftmaxWithLoss”
“InfogainLoss”
层的向前和向后传递的详细计算,而不是使用softmax层从这些预测中导出的“softmax”概率。您可以使用这些方程式创建一个比在softmax层上计算infogain损耗更具数值稳定性的
“SoftmaxWithInfogainLoss”
层:

PS,
请注意,如果要使用infogain loss进行称重,则应使用标签相似性而不是距离来输入
H
infogain\u mat

更新:

我最近实现了这个健壮的梯度计算,并创建了一个。本请购单于2017年4月合并至master branch

导数应该是
dL/dprob(j)=-infogain\u mat[label*dim+j]/prob(j)