gpt4 book ai didi

python - 自定义目标函数 Keras

转载 作者:太空宇宙 更新时间:2023-11-04 09:57:36 25 4
gpt4 key购买 nike

我需要定义自己的损失函数,我使用的是 GAN 模型,我的损失将包括真实图像和生成图像之间的逆向损失和 L1 损失。

我尝试编写一个函数但出现以下错误:

ValueError: ('Could not interpret loss function identifier:', Elemwise{add,no_inplace}.0)

我的损失函数是:

def loss_function(y_true, y_pred, y_true1, y_pred1):

bce=0
for i in range (64):
a = y_pred1[i]
b = y_true1[i]
x = K.log(a)
bce=bce-x
bce/=64
print('bce = ', bce)

for i in zip( y_pred, y_true):
img = i[0]
image = np.zeros((64,64),dtype=y_pred.dtype)
image = img[0,:,:]
image = image*127.5+127.5
imgfinal = Image.fromarray(image.astype(np.uint8))

img1 = i[1]
image1 = np.zeros((64,64), dtype=y_true.dtype)
image1 = img1[0,:,:]
image1 = image1*127.5+127.5
imgfinal1 = Image.fromarray(image1.astype(np.uint8))

diff = ImageChops.difference(imgfinal,imgfinal1)
h = diff.histogram()
sq = (value*((idx%256)**2) for idx, value in enumerate(h))
sum_of_squares = sum(sq)
lossr = math.sqrt(sum_of_squares/float(im1.size[0] * im1.size[1]))
loss = loss+lossr

loss /=(64*127)
print('loss = ', loss)

return x+loss

最佳答案

根据您的评论,您说您正在将自定义函数传递给编译操作,如下所示:

discriminator_on_generator.compile(loss = loss_function(y_true ,y_pred ,y_true1 ,y_pred1), optimizer=g_optim)

然而,根据docs你应该像这样传递你的自定义函数:

discriminator_on_generator.compile(loss = loss_function, optimizer=g_optim)

你可以看看这个github discussion它们还指示如何使用自定义损失函数。

注意:由于您在函数中需要 4 个参数并且最多只能有 2 个参数,因此您可以按照此 github issue 中的建议进行操作,这涉及到定义一个容器函数来处理这些额外的参数,例如:

def loss_function(y_true1, y_pred1):
def my_nested_function(y_true, y_pred):
#now you can work with all 4 variables here

并在编译时将其作为参数传递:

discriminator_on_generator.compile(loss=loss_function(y_true1, y_pred1), optimizer=g_optim)

或者,您可以合并您的 4 个参数为 2 个(y_true、y_predict),然后在您的单个函数中将它们拆分为您的 4 个变量(y_true、y_pred、y_true1、y_predict1),因为它们也讨论那个问题。

关于python - 自定义目标函数 Keras,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45174010/

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