gpt4 book ai didi

python - 修改损失函数中的真实值

转载 作者:行者123 更新时间:2023-12-01 09:26:21 26 4
gpt4 key购买 nike

我正在使用基于 TensorFlow 的 Keras 来解决回归问题。给定一个输入向量[x_1, ..., x_n],任务是预测输出向量[y_1, ..., y_n]。我使用带有 relu 激活的简单全连接网络,并使用均方误差作为损失函数。

我的问题是事实真相不完整:即一些输出向量没有完全注释。当向量的值没有被标注时,给定值为0。例如,我们可以有y = [54, 0, 3]。

因此,我希望损失函数不会惩罚尝试预测真实值的网络。我的想法是将真实值更改为网络在训练期间预测的值,因此对于未注释的点,损失为空 - 类似于:

def custom_loss(y_true, y_pred):
for i in range(0,len(y_true)):
if y_true[i] == 0:
y_true[i] = y_true[pred]
return K.mean(K.square(y_pred - y_true), axis=-1)

但是当我们处理张量时,似乎我们不能那么容易地改变它们的值。是否有可能做到这一点?

最佳答案

我认为反过来更容易。将预测值乘以精确的零,该元素的梯度将不会传播。

def customLoss(true,pred):

nonZeroTrue = K.cast(K.not_equal(true,0),K.floatx())
maskedPred = pred * nonZeroTrue

return anyStandardLoss(true,maskedPred)

对于“mse”,anyStandardLoss 可能在哪里:

K.mean(K.square(maskedPred - true), axis=-1)

您可以从 keras.losses 导入损失函数并在那里使用。

关于python - 修改损失函数中的真实值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50359526/

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