残留块:两层相加

时间:2019-01-09 10:09:20

标签: python keras deep-learning

我尝试在我的u-net中实现残留块。

执行以下操作:

inputs = Input((IMG_HEIGHT, IMG_WIDTH, IMG_CHANNELS))
s = Lambda(lambda x: x / 255) (inputs)

c1 = layers.Conv2D(8, (3, 3), activation='relu', padding='same') (s)
c1 = layers.Conv2D(8, (3, 3), activation='relu', padding='same') (c1)

res1 = layers.Conv2D(8, kernel_size=(3, 3), strides = (2,2), padding='same')(c1)
res1 = layers.BatchNormalization()(res1)
res1 = layers.LeakyReLU()(res1)

res1 = layers.Conv2D(8, kernel_size=(1, 1), strides=(1, 1), padding='same')(res1)
res1 = layers.BatchNormalization()(res1)

res1 = concatenate([c1, res1])

我想知道自己最后是否可以使用串联。那么,它仍然是一个残余块吗? 但是,从上面运行代码时,我遇到以下错误:

A `Concatenate` layer requires inputs with matching shapes except for 
the concat axis. Got inputs shapes: [(None, 224, 224, 8), (None, 112, 
112, 8)]

有人可以帮我吗?

1 个答案:

答案 0 :(得分:0)

问题是结果的大小不同,这是由计算c1res1时的步幅不同引起的:

res1 = layers.Conv2D(8, kernel_size=(3, 3), strides = (2,2), padding='same')(c1)
                                                      ^^^^^

如果将其更改为(1,1),则这两层将产生相同大小的输出,并且您可以将它们连接起来得到(None, 224, 224, 16)

这是否可以,要看情况,但这对我来说并不是一个好主意。