2

Keras で 2 つの畳み込みニューラル ネットワークをトレーニングしました。最初のネットは以下の通り

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

2つ目のネット

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 パラメータになり、2 番目のネットは 336387 になります。

これはどのように可能ですか?2 番目のネットはより深く、より多くのパラメーターを含む必要があります。間違いはありませんか?

4

2 に答える 2

2

はい、より深いニューラル ネットワークはより少ないパラメータを持つことができます。それらが CNN であるかどうかは関係ありません。グラフィック表現ではニューロンに焦点を当てる傾向があるため、混乱する可能性があります。ただし、学習されるのは、ニューロン間のエッジにある重みです。

「画像認識のための深層残差学習」へのリンクに加えて (Midos の回答に賛成票を投じてください)、多層パーセプトロン (MLP) のおもちゃの例を挙げたいと思います。

おもちゃの例: ボトルネック機能

最初の MLP には、784 個のニューロンからなる入力層、それぞれ 2000 個のニューロンからなる 2 つの隠れ層、および 10 個のニューロンからなる出力層 (短い: 784:2000:2000:10) があります。ここに画像の説明を入力 これにより、ニューロンを含むネットワークが作成されます。ここで、アーキテクチャ 784:2000:50:2000:10 のネットワークを考えてみましょう。これにはここに画像の説明を入力ニューロンがあります。

これは、レイヤーのいずれかを削減しなくても、別のレイヤーを追加すると、ネットワークのサイズが以前のサイズの 32% に減少したことを意味します。

于 2016-01-07T18:33:55.120 に答える