如何使用使用“tensorflow.keras”构建的两层基本 CNN 算法来编码残差块?

Raw*_*ani 4 python deep-learning keras tensorflow

我有一个使用tensorflow.keras库构建的基本 CNN 模型代码:

model = Sequential()

# First Layer
model.add(Conv2D(64, (3,3), input_shape = (IMG_SIZE,IMG_SIZE,1)))
model.add(Activation("relu"))
model.add(MaxPooling2D(pool_size = (3,3)))

# Second Layer
model.add(Conv2D(64, (3,3)))
model.add(Activation("relu"))
model.add(MaxPooling2D(pool_size = (3,3)))

# Third Layer
model.add(Conv2D(64, (3,3)))
model.add(Activation("relu"))
model.add(MaxPooling2D(pool_size = (3,3)))

# Fourth Layer
model.add(Conv2D(64, (3,3)))
model.add(Activation("relu"))
model.add(MaxPooling2D(pool_size = (3,3)))

# Fifth Layer
model.add(Conv2D(64, (3,3)))
model.add(Activation("relu"))
model.add(MaxPooling2D(pool_size = (3,3)))

model.add(Flatten())

# Sixth Layer
model.add(Dense(64))
model.add(Activation("relu"))

# Seventh Layer
model.add(Dense(1))
model.add(Activation('sigmoid'))
Run Code Online (Sandbox Code Playgroud)

现在,我想在第二层第四层之间建立连接,以使用tensorflow.keras库实现残差块

那么,我应该如何修改代码来实现这样的残差块呢?

B D*_*het 11

ResNet架构的残差块如下:

残差块

您需要使用Keras 功能 API,因为顺序模型太有限。它在 Keras 中的实现是:

from tensorflow.keras import layers

def resblock(x, kernelsize, filters):
    fx = layers.Conv2D(filters, kernelsize, activation='relu', padding='same')(x)
    fx = layers.BatchNormalization()(fx)
    fx = layers.Conv2D(filters, kernelsize, padding='same')(fx)
    out = layers.Add()([x,fx])
    out = layers.ReLU()(out)
    out = layers.BatchNormalization()(out)
    return out
Run Code Online (Sandbox Code Playgroud)

BatchNormalisation()层不是必需的,但可能是提高其准确性的可靠选择。x还需要具有与filters参数相同数量的过滤器。