Quali sono / sono i filtri predefiniti utilizzati da Keras Convolution2d ()?


18

Sono piuttosto nuovo alle reti neurali, ma capisco abbastanza bene l'algebra lineare e la matematica della convoluzione.

Sto cercando di capire il codice di esempio che trovo in vari punti della rete per addestrare un NN convoluzionale di Keras con dati MNIST per riconoscere le cifre. La mia aspettativa sarebbe che quando creo un livello convoluzionale, dovessi specificare un filtro o un insieme di filtri da applicare all'input. Ma i tre campioni che ho trovato creano tutti uno strato convoluzionale come questo:

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

Questo sembra applicare un totale di 32 filtri 3x3 alle immagini elaborate dalla CNN. Ma quali sono quei filtri? Come li descriverei matematicamente? La documentazione di Keras non è di aiuto.

Grazie in anticipo,


2
Questo deriva dalla comprensione della parte di convoluzione della CNN. Puoi leggere qui: cs231n.github.io/convolutional-networks
Christian Safka,

Risposte:


15

Per impostazione predefinita, i filtri W vengono inizializzati in modo casuale utilizzando il glorot_uniformmetodo, che disegna valori da una distribuzione uniforme con limiti positivi e negativi descritti come segue:

WU(6nin+nout,6nin+nout),

ninnout

Quando si utilizza la rete per effettuare una previsione, questi filtri vengono applicati a ciascun livello della rete. In altre parole, viene eseguita una convoluzione discreta per ciascun filtro su ciascuna immagine di input e i risultati di queste convoluzioni vengono inviati al livello successivo di convoluzioni (o livello completamente connesso o qualsiasi altra cosa si possa avere).

Durante l'allenamento, i valori nei filtri sono ottimizzati con backpropogation rispetto a una funzione di perdita. Per le attività di classificazione come il riconoscimento delle cifre, di solito viene utilizzata la perdita di entropia incrociata. Ecco una visualizzazione di alcuni filtri appresi nel primo livello (in alto) e dei filtri appresi nel secondo livello (in basso) di una rete convoluzionale:

visualizzazione filtri net conv

Come puoi vedere, i filtri del primo strato funzionano praticamente tutti come semplici rilevatori di bordi, mentre i filtri del secondo strato sono più complessi. Man mano che si approfondisce una rete, i filtri sono in grado di rilevare forme più complesse. Tuttavia, diventa un po 'complicato da visualizzare, poiché questi filtri agiscono su immagini che sono già state contorte molte volte e probabilmente non assomigliano molto all'immagine naturale originale.


5
glorot_uniformnon utilizza la distribuzione normale. Penso che tu stia descrivendo glorot_normal. Non credo che la risposta sia importante: i punti chiave sono l'inizializzazione casuale seguita dagli effetti dell'allenamento. Potrebbe valere la pena spiegare come i filtri addestrati finiscono per apparire come filtri per bordi / angoli ecc. (Forse con una delle immagini classiche dei filtri di primo livello per imaging prima / dopo l'allenamento).
Neil Slater,

Tim, grazie per avermi fornito la matematica. @Neil Slater - la tua intuizione che i filtri, dopo l'allenamento con la backpropagation, potrebbero finire per sembrare un rilevamento dei bordi, ecc., È stata molto utile. Se avessi più reputazione, farei +1 su entrambi i tuoi contributi.
ChrisFal,

@NeilSlater Grazie per il tuo commento - hai ragione, mi ero confuso glorot_normale glorot_uniformho aggiornato la risposta per riflettere questo. Ho anche aggiunto alcune informazioni extra su come finiscono i filtri, come hai suggerito.
timleathart,

6

AFkBk(i,j)

Bk(i,j)=(FkA)(i,j)=l=0,1,2m=0,1,2Fk(l,m)A(il,jm)

inserisci qui la descrizione dell'immagine

Il modello traned formerà i kernel in base alla tua funzione di costo e alla fine questi kernel sono i filtri del tuo modello.


Ho capito questa matematica, ma sono sicuro che molti lettori di questa discussione troveranno utile il diagramma. Quindi grazie!
ChrisFal,

imghost.in/images/2018/03/06/XvatD.jpg forse l'immagine deve essere con coords (0,0) su B?
Vinnitu,

@vinnitu sì, davvero. In realtà ho anche bisogno di modificare la B in Bk (i, j), (i = 0,1,2, j = 0,1,2).
lucky6qi
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.