如何在自定义损失函数中定义样本权重?



我需要对二进制序列进行分类,我希望为序列的后面部分分配更高的权重。

例如,我想分配:

sequence      -- weights for the samples in this sequence
[0,0,0,1,1,1] -- [1,1,1,2,3,4]

输入的形状为 m x n,因此长度为 n 的 m 个样本。

我想在自定义损失函数中分配权重,因为我想了解它是如何工作的(通过使用sample_weight我得到了各种维度问题(。

现在我使用以下损失函数:

def weightedLoss(weight):
def binaryPart(yTrue,yPred):
return K.mean(loss.binary_crossentropy(yTrue,yPred)*weight)  
return binaryPart

重量是包含样品重量的m x n矩阵。我收到的错误消息是:(m=20000,n=63(

无效参数错误: 不兼容的形状: [64] 与 [20000,63] [[{{node loss_39/dense_120_loss/mul}}]]

我不明白这个错误是什么意思。 dense_120这里是我的输出层,给出输出形状(None,63(。

我觉得我的损失函数的定义有误,我错过了什么?

正如丹尼尔所说,你的输出层应该包含64个神经元,但看起来它目前包含63个神经元。这应该可以修复您的错误。

为了回答您关于样本权重的问题,Keras .fit 方法已经为sample_weights取了一个参数,因此您可以在不创建自定义损失函数的情况下使用它。

fit(x=None, y=None, batch_size=None, epochs=1, verbose=1, callbacks=None, validation_split=0.0, validation_data=None, shuffle=True, class_weight=None, sample_weight=None, initial_epoch=0, steps_per_epoch=None, validation_steps=None, validation_freq=1)

相关内容

最新更新