Deep learning 通过Keras中的残差跳过两个卷积网络

Deep learning 通过Keras中的残差跳过两个卷积网络,deep-learning,conv-neural-network,resnet,Deep Learning,Conv Neural Network,Resnet,我想知道如何连接卷积层以形成残差。这是我的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,borde

我想知道如何连接卷积层以形成残差。这是我的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'

我想连接代码中所示的两层-#连接开始和结束

正如名称所示,Keras中的
顺序
模型具有严格的线性流。要使代码正常工作,您必须使用

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


还有一个演示如何实现类似剩余层的功能。

缩进四个空格以创建转义的
块。文本将被包装在标签中,并以单间距字体显示。前四个空格将被删除,但所有其他空格将被保留。您可以选择一个代码块,然后按ctrl-K键,在每个选定行的开头自动添加四个空格。有关更多信息,请参阅