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

您所在的位置:网站首页 aae吧 【AAE】【Keras】实现merge出错:TypeError: ‘module‘ object is not callable 

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

2023-10-22 17:59| 来源: 网络整理| 查看: 265

 

在运行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 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])

参考博客

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3