【问题标题】:Skipping two Convolutional network through residuals in Keras通过 Keras 中的残差跳过两个卷积网络
【发布时间】:2018-08-22 18:31:38
【问题描述】:

我想知道我们如何连接卷积层以形成残差。这是我的 VGG16:

#Initialising the CNN
cls=Sequential()

#adding 1st Convolution2D layer
cls.add(Convolution2D(64,(3,3),strides=1,border_mode='same',activation='relu',input_shape=(120,120,1)))
cls.add(Convolution2D(64,(3,3),strides=1,border_mode='same',activation='relu'))

#adding 1st pooling layer
cls.add(MaxPooling2D(pool_size=(2, 2), strides=2, padding='valid'))

#adding 2nd Convolution2D layer
cls.add(Convolution2D(128,(3,3),strides=1,border_mode='same',activation='relu'))
cls.add(Convolution2D(128,(3,3),strides=1,border_mode='same',activation='relu'))

#adding 2nd pooling layer
cls.add(MaxPooling2D(pool_size=(2, 2), strides=2, padding='valid'))

#adding 3rd Convolution2D layer
cls.add(Convolution2D(256,(3,3),strides=1,border_mode='same',activation='relu'))
cls.add(Convolution2D(256,(3,3),strides=1,border_mode='same',activation='relu'))
cls.add(Convolution2D(256,(3,3),strides=1,border_mode='same',activation='relu'))

#adding 3rd pooling layer
cls.add(MaxPooling2D(pool_size=(2, 2), strides=2, padding='valid')) #15

#adding 4th Convolution2D layer
########################connection start#########################

cls.add(Convolution2D(512,(3,3),strides=1,border_mode='same',activation='relu'))

cls.add(Convolution2D(512,(3,3),strides=1,border_mode='same',activation='relu'))

#########################connection end#########################

cls.add(Convolution2D(512,(3,3),strides=1,border_mode='same',activation='relu'))

#adding 4th pooling layer
cls.add(MaxPooling2D(pool_size=(2, 2), strides=2, padding='valid'))

#adding 5th Convolution2D layer
cls.add(Convolution2D(512,(3,3),strides=1,border_mode='same',activation='relu'))
cls.add(Convolution2D(512,(3,3),strides=1,border_mode='same',activation='relu'))
cls.add(Convolution2D(512,(3,3),strides=1,border_mode='same',activation='relu'))

#adding 5th pooling layer
cls.add(MaxPooling2D(pool_size=(2, 2), strides=2, padding='valid'))

#Flattening
cls.add(Flatten())

#Full connection1
cls.add(Dense(output_dim=2704,activation='relu'))
cls.add(Dropout(0.2))

#Full connection1
cls.add(Dense(output_dim=2000,activation='relu'))
cls.add(Dropout(0.2))

#Final Layer
cls.add(Dense(output_dim=10,activation='softmax'))

#Compiling CNN
cls.compile(optimizer='adam',loss='categorical_crossentropy',metrics=['accuracy'])#'adam'

我要连接两层如代码所示-#connection start 和end

【问题讨论】:

  • 缩进四个空格以创建转义的 <pre> <code> 块。文本将被包裹在标签中,并以等宽字体显示。前四个空格将被删除,但所有其他空格将被保留。您可以选择一个代码块并按 ctrl K 自动在每个选定行的开头添加四个空格。有关更多信息,请参阅How do I format my posts using Markdown or HTML?

标签: deep-learning conv-neural-network resnet


【解决方案1】:

Keras 中的Sequential 模型——顾名思义——具有严格的线性流。要使您的代码正常工作,您必须使用Functional API

简而言之,您必须定义一个(稍微复杂但仍可管理的工作流程),在其中将中间结果分配给变量,然后您可以将其组合起来用作后续层的输入,从而创建您的残差层。

还有一个nice gist 展示了如何实现残差层之类的东西。

【讨论】:

    猜你喜欢
    • 2018-05-09
    • 2018-06-16
    • 2017-12-20
    • 1970-01-01
    • 1970-01-01
    • 2018-08-23
    • 2021-05-04
    • 2019-08-18
    • 1970-01-01
    相关资源
    最近更新 更多