我有例如 100 个样本(100 个输出)。我想为每个样本编写带有“权重”的自定义损失函数:
(target[j] - prediction[j])**2 + f(j),
其中 f 是自定义数值函数(例如j**2
)。我该怎么做现在我只能创建“通用”损失函数(没有“权重”):
def customloss(target,prediction):
return (target - prediction)**2
问题是我无法获得索引 (j)。
这可能不再相关,但您可以创建带有输入层的第二个网络。向那个输入层传递一个代表你的权重的数组。
现在包装你的模型:
weight_layer = Input(shape=(None,dim))
m2 = Model(input=[m1.inputs,weight_layer],output=m1.outputs)
由于损失函数的输出也是张量,因此您可以将 weight_layer 添加到损失中。例如:
def customloss(y_true,y_pred):
return K.binary_crossentropy(y_true,y_pred) + weight_layer
m2.compile(optimizer='adam',loss=customloss,...)