自定义损失函数:将权重应用于二进制交叉熵错误

时间:2017-03-12 12:12:36

标签: keras

我正在和Keras一起玩,并尝试从上下文中预测单词,例如从句子" 我不得不说食物很美味!"我希望得到这样的东西:

[say the ? was tasty] -> food, meals, spaghetti, drinks

然而,我目前的问题是我正在训练的网络似乎只学习单个单词的概率,而不是他们在特定情境中的概率。

由于单词的频率不均衡,我认为我可能/可能/应该对我的损失函数应用权重 - 这是目前的二元交叉熵函数。

我只是将每个单词的反转概率乘以误差:

def weighted_binary_crossentropy(y_true, y_pred):
    return K.mean(K.binary_crossentropy(y_pred, y_true) * (1-word_weights), axis=1)

该函数被模型用作损失函数:

model.compile(optimizer='adam', loss=weighted_binary_crossentropy)

但是,我的结果完全相同,我不确定我的模型是否已损坏,或者我是否使用loss参数/函数错误。

是我的weighted_binary_crossentropy()函数做我刚才描述的吗?我问,因为出于某种原因,这种方法类似: word_weights),axis = 1)

1 个答案:

答案 0 :(得分:1)

实际上,正如人们可能会在fit sample_weights函数中读到的那样,可能会提供foreach($myarray as $key => $value) { echo $value. "<br>"; } ,这似乎正是您想要使用的内容。