【发布时间】:2018-06-23 07:58:49
【问题描述】:
我正在调整我在此处找到的 VAE https://github.com/keras-team/keras/blob/master/examples/variational_autoencoder.py 的实现 https://blog.keras.io/building-autoencoders-in-keras.html
这个实现不使用卷积层,所以可以说一切都是 1D 发生的。我的目标是在这个模型中实现 3D 卷积层。
但是,在运行批次(包含 128 个样本)时,我遇到了损失函数的形状不匹配:
def vae_loss(self, x, x_decoded_mean):
xent_loss = original_dim * metrics.binary_crossentropy(x, x_decoded_mean)
#xent_loss.shape >> [128, 40, 20, 40, 1]
kl_loss = - 0.5 * K.sum(1 + z_log_var - K.square(z_mean) - K.exp(z_log_var), axis=-1)
#kl_loss.shape >> [128]
return K.mean(xent_loss + kl_loss) # >> error shape mismatch
对于具有一维卷积层的模型,几乎相同的问题已经在Keras - Variational Autoencoder Incompatible shape 得到了回答,但我真的不明白如何推断我的情况的答案 wjich 具有更复杂的输入形状。
我已经尝试过这个解决方案:
xent_loss = original_dim * metrics.binary_crossentropy(K.flatten(x), K.flatten(x_decoded_mean))
但我不知道从数学的角度来看它是否是一个有效的解决方案,尽管现在模型正在运行。
【问题讨论】:
标签: machine-learning keras autoencoder