Use pytorch para visualizar a matriz de recursos da camada intermediária e as notas dos parâmetros do kernel de convolução

Apresentando um método para visualizar mapas de recursos e pesos de kernel

Ferramenta de visualização recomendada TensorBoard: você pode visualizar o fluxo de dados de todo o gráfico de cálculo, salvar informações de perdas, informações de precisão, etc.

Vídeo de aprendizagem: 

Use pytorch para visualizar a matriz de recursos da camada intermediária e os parâmetros do kernel de convolução_bilibili_bilibili

Baixar código:

aprendizagem profunda para processamento de imagens/pytorch_classification/analyze_weights_featuremap no master · WZMIAOMIAO/aprendizagem profunda para processamento de imagens · GitHub

1. Documentos necessários

 Os arquivos AlexNet.pth e resNet34.pth foram obtidos através de treinamento prévio

2. Etapas de operação

Matriz de recursos da camada intermediária do AlexNet

1. Defina um ponto de interrupção em out_put no arquivo analyze_feature_map.py e depure-o para visualizar as informações impressas pelo modelo de impressão.

2. Imprima duas estruturas de camadas: a primeira são os recursos e a segunda é o classificador, que corresponde à estrutura de camadas definida no arquivo alexnet_model.py, conforme mostrado na figura abaixo:

 

3. Defina um ponto de interrupção no for name, módulo em self.features.named_children(): linha do arquivo alexnet_model.py e execute-o passo a passo

 Obtenha name = 0 e camada de convolução conv 2d e assim por diante.

4. Deixe o programa executar o loop for

 Verifique out_put, que é uma lista.Existem três camadas no total, correspondendo às matrizes de recursos de saída da primeira, segunda e terceira camadas convolucionais.

5. Deixe o programa terminar a execução

(1) A saída é o mapa de recursos dos primeiros 12 canais da saída da matriz de recursos da primeira camada de convolução.

Podemos entender algumas das informações que a camada convolucional foca através do brilho do mapa de características. Quanto maior o brilho, mais interessante é a camada convolucional.

A imagem original é a seguinte:

 

(2) Saída da matriz de recursos da camada convolucional 2: O nível de abstração está cada vez mais alto e alguns núcleos de convolução não desempenham um papel.

A saída da matriz de recursos pela camada convolucional três

 (3) A cor após a remoção de cmap='gray' é azul esverdeado

(4) Se você quiser ver mais informações, faça modificações durante o processo de propagação direta de alexnet_model.py

Se quiser ver a imagem da camada totalmente conectada, você também deve passar a imagem de entrada pela estrutura da camada de feições e depois pela camada totalmente conectada para visualizá-la. 

Matriz de recursos da camada intermediária de resnet34

1. Modifique o código e defina um ponto de interrupção para depuração na figura abaixo

Você pode ver a estrutura da camada do resnet no terminal 

 2. Os resultados da execução são mostrados na figura

Obviamente, o resnet aprende mais informações do que o alexnet

Há duas razões: o resnet é realmente melhor que o alexnet

                      resnet usa o método de aprendizagem por transferência e o conjunto de dados de pré-treinamento é treinado usando o conjunto de dados imagenet.

3. A saída da matriz de recursos da camada 1 é obviamente muito melhor do que alexnet.Cada camada de recursos tem saída e é útil.

Parâmetros do kernel de convolução do AlexNet

1. Abra o arquivo analyze_kernel_weight.py

Aqui você pode carregar os pesos de treinamento diretamente através da função torch.load sem instanciar o modelo, pois após carregar através de torch.load, ele é do tipo dicionário, e sua chave representa o nome de cada estrutura de camada, e o valor correspondente é o nome de cada camada. informações de treinamento

2. Obtenha o dicionário de todos os parâmetros treináveis ​​​​no modelo por meio da função model.state_dict e, a seguir, obtenha os nomes de todas as estruturas de camadas com parâmetros por meio do método de chaves.

 Execute uma única etapa e observe pesos_keys

 Conforme mostrado na figura abaixo,weights_keys é um conjunto ordenado de chaves, que são salvas na ordem do processo de propagação direta.

Regras de nomenclatura:

                Somente camadas convolucionais como feature0, feature3, feature6, feature8 e feature10 possuem parâmetros de treinamento.

                Não há função de ativação para função de ativação e redução da resolução do pool máximo.

 3. Próxima travessiaweights_keys

 A função model.state_dict obtém as informações do dicionário de todos os parâmetros treináveis ​​​​no modelo. Passe a chave correspondente para obter as informações dos parâmetros e, em seguida, use o método numpy para converter as informações de peso em formato numpy para facilitar a análise.

Nota: A ordem dos canais do kernel de convolução é

                kernel_number é o número de kernels de convolução, correspondendo à profundidade da matriz de recursos de saída.

                profundidade do kernel de convolução kernel_channel, correspondente à profundidade da matriz de recursos de entrada

                kernel_height, kernel_width, a altura e largura do kernel de convolução

4. Obtenha informações

    # k = weight_t[0, :, :, :]  # 通过切片的方式获得信息

    # calculate mean, std, min, max    对所有卷积核的信息进行计算
    weight_mean = weight_t.mean()      #均值
    weight_std = weight_t.std(ddof=1)  #标准差
    weight_min = weight_t.min()        #最小值
    weight_max = weight_t.max()        #最大值

Distribuição dos valores do kernel de convolução correspondentes à primeira camada de convolução 

A distribuição de vieses correspondentes a uma camada convolucional

 Tudo na parte de trás é igual e não será mostrado.

Parâmetros do kernel de convolução do ResNet

1. Distribuição da primeira camada convolucional

2. Distribuição da camada bn, não há necessidade de usar viés ao usar bn

\GRANDE \gama  Peso é o parâmetro  na figura abaixo 

 viés corresponde  \GRANDE\beta aos parâmetros da figura acima

 

 média corresponde à média  \GRANDE \nós , que é obtida estatisticamente

 A variância  \GRANDE \sigma ^{2} também é obtida estatisticamente

A saída subsequente tem a mesma estrutura.

Acho que você gosta

Origin blog.csdn.net/weixin_45897172/article/details/128352977
Recomendado
Clasificación