keras 在Tensorflow中为自动编码器定义损失函数

jk9hmnmh  于 2023-06-06  发布在  其他
关注(0)|答案(1)|浏览(138)

我正在尝试在类似的行上创建自动编码器(CVAE),如这里给出的:Use Conditional Variational Autoencoder for Regression (CVAE)。但是,在vae_loss()KL_loss()中,使用的变量(l_sigmamu)与这些函数所接受的变量不同。我的问题是什么是正确的方式来传递所需的变量,在这种情况下4 -l_sigmamuy_truey_pred,通过cvae.compile()cvae.fit()的损失函数?似乎有另一种方法https://github.com/PacktPublishing/Advanced-Deep-Learning-with-Keras/blob/master/chapter8-vae/cvae-cnn-mnist-8.2.1.py#L267来定义损失函数,给出所需的4个变量。你知道吗?

yrdbyhpb

yrdbyhpb1#

要使用Tensorflow将超参数添加到自定义损失函数中,您必须创建一个接受超参数的 Package 器函数,因此您可以尝试如下定义自定义损失函数:

def vae_loss_with_hyperparameters(l_sigma, mu):
    def vae_loss(y_true, y_pred):
        recon = K.sum(K.binary_crossentropy(y_true, y_pred), axis=-1)
        kl = 0.5 * K.sum(K.exp(l_sigma) + K.square(mu) - 1. - l_sigma, axis=-1)
        return recon + kl
    return vae_loss

之后,您可以像这样调用compile()方法:cvae.compile(loss=vae_loss_with_hyperparameters(l_sigma=..., mu=...))
如果有用就告诉我。

相关问题