gpt4 book ai didi

python - 以 y_true 取决于 y_pred 的方式自定义 Keras 的损失函数

转载 作者:太空狗 更新时间:2023-10-29 21:42:09 30 4
gpt4 key购买 nike

我正在研究多标签分类器。我有很多输出标签 [1, 0, 0, 1...],其中 1 表示输入属于该标签,0 表示其他。

在我的例子中,我使用的损失函数是基于 MSE 的。我想以一种方式更改损失函数,即当输出标签为 -1 时,它将更改为该标签的预测概率。

查看所附图片以最好地理解我的意思:场景是 - 当输出标签为 -1 时,我希望 MSE 等于零:

这是场景: enter image description here

在这种情况下,我希望它更改为:

enter image description here

在这种情况下,第二个标签(中间输出)的 MSE 将为零(这是一种特殊情况,我不希望分类器了解此标签)。

感觉这是一种需要的方法,我真的不相信我是第一个想到它的人所以首先我想知道是否有这种训练神经网络的方法的名称其次我想知道我该怎么做。

我知道我需要更改损失函数中的一些内容,但我真的是 Theano 的新手,不确定如何在那里查找特定值以及如何更改张量的内容。

最佳答案

我相信这就是您要找的。

import theano
from keras import backend as K
from keras.layers import Dense
from keras.models import Sequential

def customized_loss(y_true, y_pred):
loss = K.switch(K.equal(y_true, -1), 0, K.square(y_true-y_pred))
return K.sum(loss)

if __name__ == '__main__':
model = Sequential([ Dense(3, input_shape=(4,)) ])
model.compile(loss=customized_loss, optimizer='sgd')

import numpy as np
x = np.random.random((1, 4))
y = np.array([[1,-1,0]])

output = model.predict(x)
print output
# [[ 0.47242549 -0.45106074 0.13912249]]
print model.evaluate(x, y) # keras's loss
# 0.297689884901
print (output[0, 0]-1)**2 + 0 +(output[0, 2]-0)**2 # double-check
# 0.297689929093

关于python - 以 y_true 取决于 y_pred 的方式自定义 Keras 的损失函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38684768/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com