我需要对二进制序列进行分类,在这里我希望为序列的后面部分分配更高的权重。
例如,我要分配:
sequence -- weights for the samples in this sequence
[0,0,0,1,1,1] -- [1,1,1,2,3,4]
输入的形状为m x n,因此m个样本的长度为n。
我想在自定义损失函数中分配权重,因为我想学习它是如何工作的(并且通过使用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)
InvalidArgumentError:不兼容的形状:[64]与[20000,63] [[{{node loss_39 / dense_120_loss / mul}}]]
我不明白此错误的含义。 density_120是我的输出层,给出的输出形状为(None,63)。
我觉得损失函数的定义有误,我想念什么?
答案 0 :(得分:1)
正如丹尼尔所说,您的输出层应包含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)