我在Keras训练了两个卷积神经网络。第一个是净值如下
def VGG1(weights_path):
model = Sequential()
model.add(Convolution2D(nb_filters, nb_conv, nb_conv,
border_mode='valid',
input_shape=(1, img_rows, img_cols)))
model.add(Activation('relu'))
model.add(Convolution2D(nb_filters, nb_conv, nb_conv))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(nb_pool, nb_pool)))
model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dense(128))
model.add(Activation('relu'))
model.add(Dropout(0.5))
model.add(Dense(nb_classes))
model.add(Activation('softmax'))
if weights_path:
model.load_weights(weights_path)
return model
第二个网
def VGG2(weights_path):
model = Sequential()
model.add(Convolution2D(nb_filters, nb_conv, nb_conv, border_mode='valid', input_shape=(1, img_rows, img_cols)))
model.add(Activation('relu'))
model.add(Convolution2D(nb_filters, nb_conv, nb_conv))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(nb_pool, nb_pool)))
model.add(Dropout(0.25))
model.add(Convolution2D(64, nb_conv, nb_conv, border_mode='valid'))
model.add(Activation('relu'))
model.add(Convolution2D(64, nb_conv, nb_conv))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(nb_pool, nb_pool)))
model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dense(256))
model.add(Activation('relu'))
model.add(Dropout(0.5))
model.add(Dense(nb_classes))
model.add(Activation('softmax'))
if weights_path:
model.load_weights(weights_path)
return model
当我调用model.count_params()
方法时,第一个净结果为604035参数,第二个净结果为336387。
这怎么可能?第二个网络更深,应包含更多参数。有什么错吗?
答案 0 :(得分:2)
网络的深度并不是影响其参数数量的唯一因素。每层参数的数量有很大的影响。这意味着对于每个卷积层,滤波器的大小和滤波器的数量(学习的特征)将产生巨大的差异。请在此链接http://arxiv.org/pdf/1409.1556.pdf
查看VGG小组的论文另请查看论文" Deep Residual Learning for image recognition"它表示具有多达152层的网络,即比VGG网络深8倍,同时仍具有较低的复杂度。
答案 1 :(得分:2)
是的,更深层的神经网络可以有更少的参数。如果它们是CNN并不重要。您可能会感到困惑,因为在图形表示中,人们倾向于关注神经元。然而,学到的是权重,它们位于神经元之间的边缘。
除了链接到"深度残留学习图像识别" (请uposote给Midos答案),我想给出一个多层感知器(MLP)的玩具示例。
第一个MLP有一个784个神经元的输入层,每个2000个神经元的两个隐藏层和一个10个神经元的输出层(短:784:2000:2000:10)。这会产生一个的网络 神经元。现在考虑使用体系结构784:2000:50:2000:10的网络。这有个神经元。
这意味着添加另一个图层,即使不减少任何图层,也会将网络尺寸缩小到之前尺寸的32%!