Pode redes neurais mais profundo convolucionais resultar em parâmetros menores?

votos
2

Treinei duas redes neurais convolucionais em Keras. O primeiro é o líquido é como a seguir

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

A segunda rede

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

Quando eu chamar o model.count_params()método, os primeiros resultados líquidos em 604035 parâmetro eo segundo resultados líquidos em 336.387.

Como isso é possível? A segunda rede é mais profunda e deve conter mais parâmetros. Existe algum erro?

Publicado 07/01/2016 em 06:21
fonte usuário
Em outras línguas...                            


2 respostas

votos
2

A profundidade da rede não é a única coisa que afeta o número de parâmetros. O número de parâmetros por camada tem um efeito enorme. Isto significa que para cada camada convolucional, o tamanho do filtro e o número de filtros (características aprendidas) faria uma enorme diferença. Ter um olhar para o papel do grupo VGG neste link http://arxiv.org/pdf/1409.1556.pdf

Também por favor, olhar para o papel " Aprendizagem Residual profunda para reconhecimento de imagem " que representa redes que têm até 152 camadas, ou seja, 8x mais profundo do que as redes VGG enquanto continua a ter menor complexidade.

Respondeu 07/01/2016 em 09:29
fonte usuário

votos
2

Sim, mais profundo rede neural pode ter menos parâmetros. Não importa se eles são CNNs. Você pode ser confundido, porque na representação gráfica a pessoa tende a se concentrar nos neurônios. No entanto, o que é aprendido são os pesos, que são nas bordas entre os neurônios.

Além do link para "Aprendizagem Residual profunda para reconhecimento de imagem" (por favor upvote Midos resposta para isso), eu gostaria de dar um exemplo de brinquedo de um perceptron multicamadas (MLP).

exemplo Toy: Gargalo Características

O primeiro MLP tem uma camada de entrada de 784 neurónios, duas camadas intermediárias de 2000 neurónios cada um e uma camada de 10 neurónios (curtas: 784: 2000: 2000: 10) de saída. Isso resulta em uma rede com digite descrição da imagem aqui neurónios. Agora, considere uma rede com a arquitetura 784: 2000: 50: 2000: 10. Isto tem digite descrição da imagem aquineurônios.

Isto significa que a adição de uma outra camada, mesmo sem reduzir qualquer da camada, reduziu o tamanho da rede a 32% do tamanho anterior!

Respondeu 07/01/2016 em 16:33
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more