首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >模型的输出张量必须是模型Api Tensorfow中TensorFlow ` layer‘(因此保存过去的层元数据)的输出。

模型的输出张量必须是模型Api Tensorfow中TensorFlow ` layer‘(因此保存过去的层元数据)的输出。
EN

Stack Overflow用户
提问于 2019-06-08 13:01:16
回答 1查看 1.3K关注 0票数 0
代码语言:javascript
复制
def generator_model(self):

        input_images = Input(shape=[64,64,1])
        layer1= Conv2D(self.filter_size,self.kernel_size,(2,2),padding='same',use_bias=False,kernel_initializer='random_uniform')(input_images)
        layer1=LeakyReLU(0.2)(layer1)

        layer2= Conv2D(self.filter_size*2,self.kernel_size,(2,2),padding='same',use_bias=False,kernel_initializer='random_uniform')(layer1)
        layer2=BatchNormalization()(layer2)
        layer2=LeakyReLU(0.2)(layer2)

        layer3=Conv2D(self.filter_size*4,self.kernel_size,(2,2),padding='same',use_bias=False,kernel_initializer='random_uniform')(layer2)
        layer3=BatchNormalization()(layer3)
        layer3=LeakyReLU(0.2)(layer3) 

        layer4=Conv2D(self.filter_size*8,self.kernel_size,(2,2),padding='same',use_bias=False,kernel_initializer='random_uniform')(layer3)
        layer4=BatchNormalization()(layer4)
        layer4=LeakyReLU(0.2)(layer4)  

        layer5=Conv2D(self.filter_size*16,self.kernel_size,(2,2),padding='same',use_bias=False,kernel_initializer='random_uniform')(layer4)
        layer5=BatchNormalization()(layer5)
        layer5=LeakyReLU(0.2)(layer5)            

        up_layer5 = Conv2DTranspose(self.filter_size*8,self.kernel_size,strides = (2,2),padding='same',use_bias=False)(layer5)
        up_layer5=BatchNormalization()(up_layer5)
        up_layer5=LeakyReLU(0.2)(up_layer5)
        #shape = 4*4*512
        up_layer5_concat = tf.concat([up_layer5,layer4],0)

        up_layer6 = Conv2DTranspose(self.filter_size*4,self.kernel_size,strides = (2,2),padding='same',use_bias=False)(up_layer5_concat)
        up_layer6 =BatchNormalization()(up_layer6)
        up_layer6 =LeakyReLU(0.2)(up_layer6)
                    up_layer_6_concat = tf.concat([up_layer6,layer3],0)

        up_layer7 = Conv2DTranspose(self.filter_size*2,self.kernel_size,strides = (2,2),padding='same',use_bias=False)(up_layer_6_concat)
        up_layer7 =BatchNormalization()(up_layer7)
        up_layer7 =LeakyReLU(0.2)(up_layer7)
        up_layer_7_concat = tf.concat([up_layer7,layer2],0)

        up_layer8 = Conv2DTranspose(self.filter_size,self.kernel_size,strides = (2,2),padding='same',use_bias=False)(up_layer_7_concat)
        up_layer8 =BatchNormalization()(up_layer8)
        up_layer8 =LeakyReLU(0.2)(up_layer8)
        up_layer_8_concat = tf.concat([up_layer8,layer1],0)    
        output = Conv2D(3,self.kernel_size,strides = (1,1),padding='same',use_bias=False)(up_layer_8_concat)
        final_output = LeakyReLU(0.2)(output)

        model = Model(input_images,output)
        model.summary()
        return model

这就是我的generator_model的样子,我遵循了一篇研究论文来构建这个体系结构。但是,我不同意这个错误。在这里,我已经检查了其他解决方案,但是没有一个方案对我有用,因为它们可能有点不同。我猜,问题就在tf.concat()函数上,它应该作为Lambda的tensorflow keras层,但是我也尝试过,但是没有帮助。在这个问题上有什么帮助吗?烦了我两天。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-08 15:10:29

当使用Keras定义模型时,必须使用Keras层来构建模型。

因此,您是对的,问题在于您的tf.concat调用。

但是,在tf.keras.layers包中,您可以找到使用functional的Concatenate层。

因此,您可以从以下几个方面替换您的concat层:

代码语言:javascript
复制
up_layer5_concat = tf.concat([up_layer5,layer4],0)

代码语言:javascript
复制
up_layer5_concat = tf.keras.layers.Concatenate()([up_layer5, layer4])

等等,用于网络中的每一个tf.concat调用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56506616

复制
相关文章

相似问题

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