gpt4 book ai didi

python - 用于传递 y_true 和 y_pred 以外的参数的 Keras 自定义损失函数

转载 作者:行者123 更新时间:2023-12-04 03:00:27 30 4
gpt4 key购买 nike

我正在编写一个 keras 自定义损失函数,其中我想将以下内容传递给该函数:
y_true、y_pred(这两个无论如何都会自动传递)、模型内部层的权重和一个常量。

像下面这样:

def Custom_loss(y_true, y_pred, layer_weights, val = 0.01):
loss = mse(y_true, y_pred)
loss += K.sum(val, K.abs(K.sum(K.square(layer_weights), axis=1)))
return loss

但是上面的实现给了我错误。
我怎样才能在 keras 中实现这一点?

最佳答案

新答案
我认为您正在寻找 L2 正则化。只需创建一个正则化器并将其添加到图层中:

from keras.regularizers import l2

#in the target layers, Dense, Conv2D, etc.:
layer = Dense(units, ..., kernel_regularizer = l2(some_coefficient))
您可以使用 bias_regularizer以及。 some_coefficient var 乘以权重的平方值。
PS:如果 val在你的代码中是不变的,它不应该损害你的损失。但是您仍然可以使用下面的旧答案 val .
旧答案
根据您的需要将 Keras 预期函数(带有两个参数)包装到外部函数中:
def customLoss(layer_weights, val = 0.01):

def lossFunction(y_true,y_pred):
loss = mse(y_true, y_pred)
loss += K.sum(val, K.abs(K.sum(K.square(layer_weights), axis=1)))
return loss

return lossFunction

model.compile(loss=customLoss(weights,0.03), optimizer =..., metrics = ...)
请注意 layer_weights必须直接来自层作为“张量”,所以你不能使用 get_weights() ,你必须和 someLayer.kernel一起去和 someLayer.bias . (或者,如果层的可训练参数使用不同的名称,则使用各自的 var 名称)。

如果您的外部变量随批次变化,这里的答案显示了如何处理: How to define custom cost function that depends on input when using ImageDataGenerator in Keras?

关于python - 用于传递 y_true 和 y_pred 以外的参数的 Keras 自定义损失函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46858016/

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