我正在处理一个keras.io示例,其中构建了一个变分的自动编码器,在这里可以找到:https://keras.io/examples/generative/vae/#variational-autoencoder
,
错误消息:
TypeError:预期的float32传递给op 'Equal‘的参数'y’,得到'str‘类型的'auto’。错误:预期的float32,得到‘自动’类型'str‘而不是。
此外,
发布于 2021-06-02 10:32:09
关于3.:存在偏差,因为每一次损失都是一批内所有样品的平均损失。如果考虑了每个示例,则reconstruction_loss和KL_loss的总和等于total_loss。
关于1:我认为,tf.reduce_sum命令是不正确的,因为它是所有像素损失的总和。我认为应该是tf.reduce_mean,它比所有像素的平均损失都要大。我认为,为了使reconstruction_loss与KL_loss保持平衡,这是很重要的。这不幸导致了糟糕的训练结果,我将其解释为“后路塌陷”(仍不确定,这是否真的是后路塌陷)。下面的图显示了不良的分布潜在空间。有关进一步解释,请参见:https://keras.io/examples/generative/vae/#variational-autoencoder
[

我发现的一个解决办法是以如下方式对损失进行不同的加权:
total_loss = 1000*reconstruction_loss + kl_loss这导致了正确的结果:

我对取平均值而非和以及后崩溃的解释是否正确?我的损失有可能加重吗?
https://stackoverflow.com/questions/67790744
复制相似问题