好吧,所以我有一个神经网络,将火势分为3组,即0-1、1-100和100英亩以上。我需要一个损失函数,当分类器猜测的类偏离2(实际= 0,预测= 3)时,将损失加权为两倍(
答案 0 :(得分:0)
I need a loss function that weights the loss as double when the classifier guesses a class that is off by 2 (Actual = 0, predicted = 3)
是什么的两倍?
A)分类器正确猜测时,它是损失值的两倍吗?
B)或当分类器关闭1时将损失值加倍。
C)我们可以放宽这个“双重”约束,并且可以假设任何合适的更高功率就足够了吗?
让我们假设A)。
让f(x)表示您的输入变量属于特定类的概率。请注意,在f(x)中,x是分类值之差的绝对值。
然后我们看到f(0)= 0.5是假设A的解决方案。这意味着f(1)= 0.25和f(2)= 0.25。顺便说一句,f(1)== f(2)看起来不自然。
假设您的分类器计算函数f(x),并按如下所示使用它。
def classifier_output(firesize):
if (firesize >=0 and firesize < 1.0):
return [f(0), f(1), f(2)]
elif (firesize >= 1.0 and firesize < 100.0):
return [f(1), f(0), f(1)]
else :
assert(firesize > 100.0)
return (f(2), f(1), f(0)]
约束是
C1)
f(x) >=0
C2)
the components of your output vector should always sum to 1.0
ie. sum of all three components of the return value should always be 1.
C3)
When the true class and predicted class differ by 2, the 1-hot encoding loss
will be -log(f(2)), According to assumption A, this should equal -2log(f(0)).
即:
log(f(2))=2*log(f(0))
这翻译成
f(2) = f(0)*f(0)
让我们输入z = f(0)。现在f(2)= z * z我们不知道f(1)。让我们假设f(1)= y。
根据约束C2, 我们有以下方程式,
z+ z*z + y=1
z + 2*y=1
上述解决方案为z = 0.5,y = 0.25
如果您假设B),您将找不到这种功能。