gpt4 book ai didi

python - 凯拉斯/ tensorflow : Combined Loss function for single output

转载 作者:行者123 更新时间:2023-11-28 22:17:03 24 4
gpt4 key购买 nike

我的模型只有一个输出,但我想结合两种不同的损失函数:

def get_model():
# create the model here
model = Model(inputs=image, outputs=output)

alpha = 0.2
model.compile(loss=[mse, gse],
loss_weights=[1-alpha, alpha]
, ...)

但它提示我需要有两个输出,因为我定义了两个损失:

ValueError: When passing a list as loss, it should have one entry per model outputs. 
The model has 1 outputs, but you passed loss=[<function mse at 0x0000024D7E1FB378>, <function gse at 0x0000024D7E1FB510>]

我能否在不必创建另一个损失函数的情况下编写我的最终损失函数(因为这会限制我在损失函数之外更改 alpha)?

我如何做类似(1-alpha)*mse + alpha*gse的事情?


更新:

我的两个损失函数都等同于任何内置 keras 损失函数的函数签名,接受 y_truey_pred 并给出损失的张量(可以是使用 K.mean()) 减少为标量,但我相信,只要它们返回有效损失,这些损失函数的定义方式就不会影响答案。

def gse(y_true, y_pred):
# some tensor operation on y_pred and y_true
return K.mean(K.square(y_pred - y_true), axis=-1)

最佳答案

为损失指定自定义函数:

model = Model(inputs=image, outputs=output)

alpha = 0.2
model.compile(
loss=lambda y_true, y_pred: (1 - alpha) * mse(y_true, y_pred) + alpha * gse(y_true, y_pred),
...)

或者,如果您不希望丑陋的 lambda 表达式成为实际函数:

def my_loss(y_true, y_pred):
return (1 - alpha) * mse(y_true, y_pred) + alpha * gse(y_true, y_pred)

model = Model(inputs=image, outputs=output)

alpha = 0.2
model.compile(loss=my_loss, ...)

编辑:

如果您的 alpha 不是某个全局常数,您可以有一个“损失函数工厂”:

def make_my_loss(alpha):
def my_loss(y_true, y_pred):
return (1 - alpha) * mse(y_true, y_pred) + alpha * gse(y_true, y_pred)
return my_loss

model = Model(inputs=image, outputs=output)

alpha = 0.2
my_loss = make_my_loss(alpha)
model.compile(loss=my_loss, ...)

关于python - 凯拉斯/ tensorflow : Combined Loss function for single output,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51705464/

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