更深层次的卷积神经网络可以导致更少的参数吗?

时间:2016-01-07 08:21:27

标签: python machine-learning conv-neural-network keras

我在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。

这怎么可能?第二个网络更深,应包含更多参数。有什么错吗?

2 个答案:

答案 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)。这会产生一个enter image description here的网络 神经元。现在考虑使用体系结构784:2000:50:2000:10的网络。这有enter image description here个神经元。

这意味着添加另一个图层,即使不减少任何图层,也会将网络尺寸缩小到之前尺寸的32%!