首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >此VAE模型无法编译

此VAE模型无法编译
EN

Stack Overflow用户
提问于 2019-03-27 23:28:02
回答 1查看 224关注 0票数 0

我正在构建一个VAE,我看到了一些架构,我做了一个编码器模型,一个解码器模型,然后VAE加入了它们,但当编译VAE时,它给了我一个错误

代码语言:javascript
复制
def sampling(args):
    z_mean, z_log_var = args
    batch = K.shape(z_mean)[0]
    dim = K.int_shape(z_mean)[1]
    # by default, random_normal has mean = 0 and std = 1.0
    epsilon = K.random_normal(shape=(batch, dim))
    sample = z_mean + K.exp(0.5 * z_log_var) * epsilon
    return sample

#z_zample is a lambda layer sampling from mean and log_sigma
encoder = Model(vae_input, z_sample)

#the decoder whit it's own output
decoder = Model(latent_input, y)

#then the vae
vae = Model(vae_input, decoder(encoder(vae_input)))

vae.summary()
代码语言:javascript
复制
Layer (type)                 Output Shape              Param #   
=================================================================
input_27 (InputLayer)        (None, 256, 256, 3)       0         
_________________________________________________________________
model_25 (Model)             (None, 256)               537755232 
_________________________________________________________________
model_29 (Model)             (None, 256, 256, 3)       537754179 
=================================================================
Total params: 1,075,509,411
Trainable params: 1,075,509,411
Non-trainable params: 0

似乎这里的一切都是联系在一起的。

将损失添加到自动编码器:

代码语言:javascript
复制
def vae_loss(x, x_decoded_mean):
    kl_loss = - 0.5 * K.sum(1. + z_log_var - K.square(z_mean) - K.exp(z_log_var), axis=-1)   
    kl_loss = K.mean(kl_loss)

    loss = (  0.5 * math.log(2 * math.pi)
            + 0.5 * K.log(_x_decoded_var + var_epsilon)
            + 0.5 * K.square(x - x_decoded_mean) / (_x_decoded_var + var_epsilon))
    loss = K.sum(loss, axis=-1)
    loss = K.mean(loss)

    return loss + kl_loss


vae.add_loss(vae_loss)
vae.compile(optimizer='adam')

...this是我得到的错误

代码语言:javascript
复制
<ipython-input-113-99395114942f> in <module>()
     14 
     15 vae.add_loss(vae_loss)
---> 16 vae.compile(optimizer='adam')
     17 vae.summary()

C:\Programming\Anaconda\lib\site-packages\keras\engine\training.py in compile(self, optimizer, loss, metrics, loss_weights, sample_weight_mode, weighted_metrics, target_tensors, **kwargs)
    358             # and other layer-specific losses.
    359             for loss_tensor in self.losses:
--> 360                 total_loss += loss_tensor
    361 
    362         # List of same size as output_names.

TypeError: unsupported operand type(s) for +=: 'float' and 'function'
EN

回答 1

Stack Overflow用户

发布于 2019-03-28 00:02:50

add_loss()方法需要一个张量。您应该传递调用vae_loss()方法的结果。

代码语言:javascript
复制
vae.add_loss(vae_loss())
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55380914

复制
相关文章

相似问题

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