【发布时间】:2020-01-13 12:47:01
【问题描述】:
我需要对二进制序列进行分类,我希望为序列的后面部分分配更高的权重。
比如我要赋值:
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}}]]
我不明白这个错误是什么意思。 dense_120 是我的输出层,作为输出形状 (None,63)。
我觉得我的损失函数的定义有错误,我遗漏了什么?
【问题讨论】:
-
嗯...很明显,您有形状为 64 的数据和输出形状为 63 的模型。
-
我使用了64的batch_size(随机选择),这似乎影响了事情。将它放在 63 上会产生相同的错误,但现在是 [45] 与 [20000,63]。把它放在 1 让我运行我的脚本。你能解释一下为什么 batch_size 很重要吗?
-
您需要提供有关您正在做什么的足够信息。无法判断您的输出形状为何表现异常。
标签: python-3.x keras loss-function