首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >* TypeError:预期的float32传递给op 'Equal‘的参数'y’,得到'str‘类型的'auto’

* TypeError:预期的float32传递给op 'Equal‘的参数'y’,得到'str‘类型的'auto’
EN

Stack Overflow用户
提问于 2021-06-01 14:28:52
回答 1查看 363关注 0票数 0

我正在处理一个keras.io示例,其中构建了一个变分的自动编码器,在这里可以找到:https://keras.io/examples/generative/vae/#variational-autoencoder

  1. ,我试图用MeanSquaredError-损失替换二进制_交叉熵损失,但是我得到了一个TypeError。我要做什么,才能得到tf.reduce_mean(tf.reduce_sum(keras.losses.binary_crossentropy(data,重建),axis=(1,2),reconstruction_loss = tf.reduce_mean(tf.reduce_sum(keras.losses.MeanAbsoluteError(data,重建),axis=(1,2))

错误消息:

TypeError:预期的float32传递给op 'Equal‘的参数'y’,得到'str‘类型的'auto’。错误:预期的float32,得到‘自动’类型'str‘而不是。

此外,

  1. 我不明白为什么使用二进制交叉熵损失,因为我把这个损失理解为分类损失,但在这里,我比较原始数据的值和它的重构,这是一种回归,而不是分类。那么,为什么仍然适合使用crossentropy-loss?
  2. When -我运行的代码与交叉熵损失,并看看我的损失,那么KL损失和重建损失不总结为全损。我的意思是,总损失总是不等于KL损失和重建损失之和,尽管在列车步进法中它是正确编程的。那么,为什么会有偏差呢?
EN

回答 1

Stack Overflow用户

发布于 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

[

我发现的一个解决办法是以如下方式对损失进行不同的加权:

代码语言:javascript
复制
total_loss = 1000*reconstruction_loss + kl_loss

这导致了正确的结果:

我对取平均值而非和以及后崩溃的解释是否正确?我的损失有可能加重吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67790744

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档