python - Keras,VAE:创建计算每个像素值平均值的自定义损失
问题描述
我正在构建一个变分自动编码器,它将 28x28x1 图像作为输入并生成 28x28x1 图像作为输出,因此每个输入和输出样本都可以表示为具有 784 个条目的向量。我想在自定义损失中添加一个计算每个输入和输出图像中 784 个值的平均值的术语,然后计算这些平均值之间的交叉熵。
我的疑问是我的代码是否正在计算每个输入 - 输出图像的平均值,而不是完整的输入和输出图像集。我作为输入发送的完整数据集具有形状(无、28、28、1)。我希望自定义损失来比较每对输入和生成图像的均值。
这是我写的代码:
def vae_loss(self, x, z_decoded):
x_flat = K.flatten(x)
z_decoded_flat = K.flatten(z_decoded)
#usual cross entropy between input and output
xent_loss = keras.metrics.binary_crossentropy(x_flat, z_decoded_flat)
#kl divergence
kl_loss = -5e-4 * K.mean(
1 + z_log_var - K.square(z_mean) - K.exp(z_log_var), axis=-1)
#cross-entropy between the means
input = K.mean( K.flatten(x), axis=-1 )
output = K.mean( K.flatten(z_decoded), axis=-1 )
xent_means = keras.metrics.binary_crossentropy(input, output)
return K.mean(xent_loss + kl_loss + xent_means)
模型的总结是这样的:
非常感谢您提前提供任何提示。
解决方案
推荐阅读
- nlp - 使用 CoreNLP 将句子分割成子句
- android - MSAL(Azure AD) Android Webview 要求提供登录凭据
- java - java azure web app 找不到适合 jdbc:sqlserver 的驱动程序
- sql - 带有多 where 语句的过程
- windows - 使用 windows api 解释 RPC 身份验证
- ios - iOS App 编译运行,只显示黑屏
- java - 解析所有 ISO 8601 DateTime 格式 Java 1.8
- java - 需要将以下字符串打印为:10-30 03:45:04.312 2760 2760 GrowthKit: job GrowthKit.PeriodicSyncJob failed E
- angular - 动态 ngClass 名称
- html - 悬停时在div中显示文本在css中不起作用