【AAE】【Keras】实现merge出错:TypeError: ‘module‘ object is not callable 

 

在运行AAE的git代码时,发现encoder的构建中,有一行是报错的:

 latent_repr = merge([mu, log_var],
       mode=lambda p: p[0] + K.random_normal(K.shape(p[0])) * K.exp(p[1] / 2),
       output_shape=lambda p: p[0])

 

报错显示merge有问题:TypeError: 'module' object is not callable 

原因分析:

查看了 keras关于Merging layer的文档,发现现在的keras.layer中并不存在merge这个方法。keras.layer只提供以下几个方法

解决办法:对merge进行改写。

若merge( [Layer] , mode, output_shape) 中的mode = 'concat' , 则需要使用Concatenate方法, 若mode='multi' 则换成Multiply方法   

merge6 = merge([drop4, up6], mode='concat', concat_axis=3)

# 换成:
from keras.layers import Concatenate
merge6 = Concatenate(axis=3)([drop4, up6])

若merge( [Layer] , mode, output_shape) 中的mode =是一个复杂的公式,则需要自己创建一个class

 latent_repr = merge([mu, log_var],
       mode=lambda p: p[0] + K.random_normal(K.shape(p[0])) * K.exp(p[1] / 2),
       output_shape=lambda p: p[0])

# 换成:

# 1 新建一个MergeLayer.py文件如下
from keras.engine.base_layer import Layer
import keras.backend as K

class MergeLayer(Layer):

    def __init__(self, **kwargs):
        super(MergeLayer, self).__init__(**kwargs)

    def compute_output_shape(self, input_shape):
        return (input_shape[0][0], input_shape[0][1])

    def call(self, x, mask=None):
        final_output = x[0] + K.random_normal(K.shape(x[0])) * K.exp(x[1] / 2)
        return final_output

# 2 在原方法中引用并调用这个类的方法:
from MergeLayer import MergeLayer
latent_repr = MergeLayer()([mu, log_var])

参考博客

 

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值