Quais são / são os filtros padrão usados ​​pelo Keras Convolution2d ()?


18

Sou bastante novo em redes neurais, mas entendo a álgebra linear e a matemática da convolução de maneira bastante decente.

Estou tentando entender o código de exemplo que encontro em vários locais da rede para treinar um NN convolucional Keras com dados MNIST para reconhecer dígitos. Minha expectativa seria que, ao criar uma camada convolucional, eu tivesse que especificar um filtro ou conjunto de filtros para aplicar à entrada. Mas as três amostras que encontrei criam uma camada convolucional como esta:

model.add(Convolution2D(nb_filter = 32, nb_row = 3, nb_col = 3,
                        border_mode='valid',
                        input_shape=input_shape))

Parece estar aplicando um total de 32 filtros 3x3 às imagens processadas pela CNN. Mas o que são esses filtros? Como eu os descreveria matematicamente? A documentação do keras não ajuda.

Desde já, obrigado,


2
Isso vem do entendimento da parte de convolução da CNN. Você pode ler aqui: cs231n.github.io/convolutional-networks
Christian Safka

Respostas:


15

Por padrão, os filtros são inicializados aleatoriamente usando o método, que extrai valores de uma distribuição uniforme com limites positivos e negativos descritos da seguinte forma: Wglorot_uniform

Wvocê(6nEun+novocêt,-6nEun+novocêt),

onde é o número de unidades que alimentam esta unidade e é o número de unidades às quais esse resultado é alimentado.nEunnovocêt

Quando você está usando a rede para fazer uma previsão, esses filtros são aplicados em cada camada da rede. Ou seja, é realizada uma convolução discreta para cada filtro em cada imagem de entrada, e os resultados dessas convoluções são alimentados para a próxima camada de convoluções (ou camada totalmente conectada ou qualquer outra coisa que você possa ter).

Durante o treinamento, os valores nos filtros são otimizados com retropropagação em relação a uma função de perda. Para tarefas de classificação, como reconhecimento de dígitos, geralmente é usada a perda de entropia cruzada. Aqui está uma visualização de alguns filtros aprendidos na primeira camada (superior) e dos filtros aprendidos na segunda camada (inferior) de uma rede convolucional:

visualização de filtros de rede conv

Como você pode ver, os filtros da primeira camada basicamente atuam como simples detectores de borda, enquanto os filtros da segunda camada são mais complexos. À medida que você avança em uma rede, os filtros são capazes de detectar formas mais complexas. No entanto, fica um pouco difícil de visualizar, pois esses filtros atuam em imagens que já foram convolvidas muitas vezes e provavelmente não se parecem muito com a imagem natural original.


5
glorot_uniformnão usa a distribuição normal. Eu acho que você está descrevendo glorot_normal. Eu não acho que isso importe muito para a resposta - os pontos principais são a inicialização aleatória seguida pelos efeitos do treinamento. Pode valer a pena explicar como os filtros treinados acabam parecendo filtros de borda / canto etc. (talvez com uma das imagens clássicas de filtros de primeira camada antes / depois do treinamento de criação de imagens).
Neil Slater

Tim, obrigado por fornecer as contas. @ Neil Slater - sua percepção de que os filtros, após o treinamento com retropropagação, podem acabar parecendo detecção de borda, etc., foi bastante útil. Se eu tivesse mais reputação, adicionaria +1 às suas contribuições.
ChrisFal

@ NeilSlater Obrigado pelo seu comentário - você está certo, eu confundi glorot_normale glorot_uniformatualizei a resposta para refletir isso. Também adicionei algumas informações extras sobre como os filtros acabam, como você sugeriu.
precisa saber é o seguinte

6

UMAFkBk(Eu,j)

Bk(Eu,j)=(FkUMA)(Eu,j)=eu=0 0,1,2m=0 0,1,2Fk(eu,m)UMA(Eu-eu,j-m)

insira a descrição da imagem aqui

O modelo traned treinará os kernels de acordo com a sua função de custo e, no final, esses kernels são os filtros do seu modelo.


Eu entendi essa matemática, mas tenho certeza de que muitos leitores deste tópico acharão o diagrama útil. Então obrigado!
ChrisFal

imghost.in/images/2018/03/06/XvatD.jpg talvez a imagem deva estar com cordas (0,0) em B?
vinnitu

@vinnitu sim, de fato. Na verdade, eu também preciso modificar o B em Bk (i, j), (i = 0,1,2, j = 0,1,2).
lucky6qi
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.