我在这个研究领域很吵,这可能是一个非常愚蠢的问题。我想构建一个普通的ANN,但我不确定是否可以使用加权均方误差作为损失函数。
如果我们不是平等地处理每个样本,我的意思是我们更关心某些类别的样本的预测精度比其他样本更多,那么我们想要形成加权损失函数。
可以说,我们有一个分类特征ci
,i
是样本的索引,为简单起见,我们假设此特征采用二进制值,0或1.因此,我们可以形成损失函数
(ci + 1)(yi_hat - yi)^2
#and take the sum for all i
反向传播是否会出现任何问题?我没有看到计算渐变或更新图层之间权重的任何问题。
而且,如果没有问题,我如何在Keras中编程这种损失功能?因为看起来损失函数只需要两个参数y_true
和y_pred
,我如何插入向量c
?
答案 0 :(得分:1)
这绝对没有错。函数可以自己声明常量,甚至可以从外部范围中获取常量:
import keras.backend as K
c = K.constant([c1,c2,c3,c4,...,cn])
def weighted_loss(y_true,y_pred):
loss = keras.losses.get('mse')
return c * loss(y_true,y_pred)
与你的完全一样:
def weighted_loss(y_true,y_pred):
weighted = (c+1)*K.square(y_true-y_pred)
return K.sum(weighted)