700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 【AAE】【Keras】实现merge出错:TypeError: ‘module‘ object is not callable

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

时间:2022-02-08 06:11:42

相关推荐

【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只提供以下几个方法

Concatenate layerAverage layerMaximum layerMinimum layerAdd layerSubtract layerMultiply layerDot 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 Concatenatemerge6 = 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 Layerimport keras.backend as Kclass 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 MergeLayerlatent_repr = MergeLayer()([mu, log_var])

参考博客

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。