model = Sequential()
model.add(Conv2D(64, (1, 1), activation='relu', input_shape=(64,64,3)))
model.add(Conv2D(64, (5,5), strides=(2,2), padding='same'))
model.add(MaxPooling2D(pool_size=3, strides=(2,2)))
model.add(Conv2D(64, (1, 1),
strides=(1,1),
activation='relu',
padding='valid' ))
model.add(Conv2D(64, (3, 3),
strides=(1,1),
activation='relu',
padding='valid' ))
model.add(Conv2D(64, (1, 1),
strides=(1,1),
activation='relu',
padding='valid' ))
model.add(Conv2D(64, (3, 3),
strides=(1,1),
activation='relu',
padding='valid' ))
model.add(Conv2D(64, (1, 1),
strides=(1,1),
activation='relu',
padding='valid' ))
model.add(Conv2D(64, (3, 3),
strides=(1,1),
activation='relu',
padding='valid' ))
model.add(Conv2D(128, (1,1),
strides=(2,2),
activation='relu',
padding='valid'))
model.add(Conv2D(128, (3,3),
strides=(1,1),
activation='relu',
padding='valid'))
model.add(Conv2D(128, (1, 1),
strides=(1,1),
activation='relu',
padding='valid' ))
model.add(Conv2D(128, (3,3),
strides=(1,1),
activation='relu',
padding='valid'))
model.add(Conv2D(128, (1,1),
strides=(1,1),
activation='relu',
padding='valid'))
model.add(Conv2D(128, (3,3),
strides=(1,1),
activation='relu',
padding='valid'))
model.add(Conv2D(128, (1,1),
strides=(1,1),
activation='relu',
padding='valid'))
model.add(Conv2D(128, (3,3),
strides=(1,1),
padding='valid'))
model.add(AveragePooling2D(pool_size=2, strides=(2,2), padding='valid'))
model.add(Conv2D(1,1,200))
model.add(Flatten())
model.add(Activation('softmax'))
这种架构有什么问题?我收到错误的负尺寸。我想避免密集层和辍学
数据挖掘
机器学习
神经网络
深度学习
2022-02-20 04:21:53
1个回答
您使用的图层太多,空间空间不足。
大多数卷积层都使用“有效”填充,这意味着卷积仅在没有任何填充的实际“像素”上执行,因此输出的空间维度小于输入。
我已经标记了它在您的脚本中发生的位置:
model = Sequential()
model.add(Conv2D(64, (1, 1), activation='relu', input_shape=(64,64,3)))
model.add(Conv2D(64, (5,5), strides=(2,2), padding='same'))
model.add(MaxPooling2D(pool_size=3, strides=(2,2)))
model.add(Conv2D(64, (1, 1),
strides=(1,1),
activation='relu',
padding='valid' ))
model.add(Conv2D(64, (3, 3),
strides=(1,1),
activation='relu',
padding='valid' ))
model.add(Conv2D(64, (1, 1),
strides=(1,1),
activation='relu',
padding='valid' ))
model.add(Conv2D(64, (3, 3),
strides=(1,1),
activation='relu',
padding='valid' ))
model.add(Conv2D(64, (1, 1),
strides=(1,1),
activation='relu',
padding='valid' ))
model.add(Conv2D(64, (3, 3),
strides=(1,1),
activation='relu',
padding='valid' ))
model.add(Conv2D(128, (1,1),
strides=(2,2),
activation='relu',
padding='valid'))
model.add(Conv2D(128, (3,3),
strides=(1,1),
activation='relu',
padding='valid'))
model.add(Conv2D(128, (1, 1),
strides=(1,1),
activation='relu',
padding='valid' ))
model.add(Conv2D(128, (3,3),
strides=(1,1),
activation='relu',
padding='valid'))
model.add(Conv2D(128, (1,1),
strides=(1,1),
activation='relu',
padding='valid'))
model.summary() # This is where it happens - The output of this layer is of shape (1,1,128)
model.add(Conv2D(128, (3,3),
strides=(1,1),
activation='relu',
padding='valid'))
model.add(Conv2D(128, (1,1),
strides=(1,1),
activation='relu',
padding='valid'))
model.add(Conv2D(128, (3,3),
strides=(1,1),
padding='valid'))
model.add(AveragePooling2D(pool_size=2, strides=(2,2), padding='valid'))
model.add(Conv2D(1,1,200))
model.add(Flatten())
model.add(Activation('softmax'))
您可以使用 Keras 的“摘要”方法来调查您的模型。例如,我在这里编写的脚本的输出是:
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
conv2d_1 (Conv2D) (None, 64, 64, 64) 256
_________________________________________________________________
conv2d_2 (Conv2D) (None, 32, 32, 64) 102464
_________________________________________________________________
max_pooling2d_1 (MaxPooling2 (None, 15, 15, 64) 0
_________________________________________________________________
conv2d_3 (Conv2D) (None, 15, 15, 64) 4160
_________________________________________________________________
conv2d_4 (Conv2D) (None, 13, 13, 64) 36928
_________________________________________________________________
conv2d_5 (Conv2D) (None, 13, 13, 64) 4160
_________________________________________________________________
conv2d_6 (Conv2D) (None, 11, 11, 64) 36928
_________________________________________________________________
conv2d_7 (Conv2D) (None, 11, 11, 64) 4160
_________________________________________________________________
conv2d_8 (Conv2D) (None, 9, 9, 64) 36928
_________________________________________________________________
conv2d_9 (Conv2D) (None, 5, 5, 128) 8320
_________________________________________________________________
conv2d_10 (Conv2D) (None, 3, 3, 128) 147584
_________________________________________________________________
conv2d_11 (Conv2D) (None, 3, 3, 128) 16512
_________________________________________________________________
conv2d_12 (Conv2D) (None, 1, 1, 128) 147584
_________________________________________________________________
conv2d_13 (Conv2D) (None, 1, 1, 128) 16512
=================================================================
Total params: 562,496
Trainable params: 562,496
Non-trainable params: 0
其它你可能感兴趣的问题