微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

KL 损失函数在 keras tensorflow 中抛出类型错误

如何解决KL 损失函数在 keras tensorflow 中抛出类型错误

我使用了一些 vae 教程来启动我的代码。我无法应对损失函数的唯一问题。如果我只使用 KL div loss(刚刚从教程中一一得到):

z_mean = Dense(self.latent_dim,name='z_mean')(encoded)
z_log_var = Dense(self.latent_dim,name='z_log_var')(encoded)

def vae_loss(x,decoded):
  kl_loss = -0.5 * K.sum(1 + z_log_var - K.square(z_mean) - K.exp(z_log_var),axis=-1)
  return kl_loss

然后我在训练中出错

TypeError:无法将符号 Keras 输入/输出转换为 numpy 数组。此错误可能表明您正在尝试将符号值传递给 NumPy 调用,但该调用不受支持。或者,您可能试图将 Keras 符号输入/输出传递给未注册分派的 TF API,从而阻止 Keras 自动将 API 调用转换为功能模型中的 lambda 层。

当我使用另一个损失时不会发生错误,例如:

def vae_loss(x,decoded):
  mse_loss = tf.losses.mean_squared_error(x,decoded)
  return mse_loss

vae 的架构如下:

net arch

那么如何修复这个错误,原因是什么?

编辑

我发现问题在于损失函数中有 KerasTensor。为了解决这个问题,我们需要使用带有“add_loss”函数的技巧来为损失函数提供 mu 和 sigma 参数。您可以查看 What is the purpose of the add_loss function in Keras? 是否有类似问题

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。