首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Tensorflow中实现UNet

在Tensorflow中实现UNet
EN

Stack Overflow用户
提问于 2019-12-08 15:37:28
回答 1查看 1.3K关注 0票数 0

我试图使用Keras在UNet 2中实现TensorFlow 2中的图像分割,但我不知道如何实现级联层。以下是我尝试过的:

代码语言:javascript
复制
def create_model_myunet(depth, start_f, output_channels, encoder_kernel_size):

    # Encoder
    model = tf.keras.Sequential()

    for i in range(0, depth):

        if i == 0:
            print("Specifying an input shape")
            input_shape = [config.img_h, config.img_w, 3]
        else:
            input_shape = [None]

        model.add(tf.keras.layers.Conv2D(filters=2**(start_f+i), 
                                         kernel_size=(encoder_kernel_size, encoder_kernel_size),
                                         strides=(1, 1),
                                         padding='same',
                                         input_shape=input_shape,
                                         name = "enc_conv2d_" + str(i)))
        model.add(tf.keras.layers.ReLU(name = "enc_relu_" + str(i)))
        model.add(tf.keras.layers.MaxPool2D(pool_size=(2, 2), name="enc_maxpool2d_" + str(i)))

    # Decoder
    initializer = tf.random_normal_initializer(0., 0.02)

    for i in range(depth, 1, -1):

        model.add(
        tf.keras.layers.Conv2DTranspose(2**(start_f+i),
                                        encoder_kernel_size,
                                        strides=2,
                                        padding='same',
                                        kernel_initializer=initializer,
                                        use_bias=False)
        )

        model.add(tf.keras.layers.BatchNormalization())

        model.add(tf.keras.layers.ReLU(name="dec_relu_"+str(i)))

        model.add(tf.keras.layers.Concatenate([
            model.get_layer(name="dec_relu_"+str(i)).output,  
            model.get_layer(name="enc_relu_"+str(i-1)).output
        ] ))
        pass

    last = tf.keras.layers.Conv2DTranspose(
      output_channels, 3, strides=2,
      padding='same', activation='softmax')  #64x64 -> 128x128

    model.add(last)

    return model

它给出了以下错误:

ValueError:应该在至少两个输入的列表上调用一个Concatenate

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-08 16:07:34

你需要改变

代码语言:javascript
复制
model.add(tf.keras.layers.Concatenate([
    model.get_layer(name="dec_relu_"+str(i)).output,  
    model.get_layer(name="enc_relu_"+str(i-1)).output
] ))

代码语言:javascript
复制
model.add(tf.keras.layers.Concatenate()([  # Sequential api
    model.get_layer(name="dec_relu_"+str(i)).output,  
    model.get_layer(name="enc_relu_"+str(i-1)).output
] ))

代码语言:javascript
复制
model.add(tf.keras.layers.concatenate([  # Functional api
    model.get_layer(name="dec_relu_"+str(i)).output,  
    model.get_layer(name="enc_relu_"+str(i-1)).output
] ))
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59237001

复制
相关文章

相似问题

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