2015-12-24 19 views
5

Per un ConvNet può essere interessante trovare l'input con limiti normati che massimizza l'attività di una singola conv. filtro come un modo per visualize the filters. Mi piacerebbe farlo nel pacchetto di deep learning Keras. Questo potrebbe essere fatto usando un algoritmo di ottimizzazione della scatola nera con il codice dallo FAQ.Gradiente dall'espressione Theano per la visualizzazione del filtro in Keras

# with a Sequential model 
get_3rd_layer_output = theano.function([model.layers[0].input], 
             model.layers[3].get_output(train=False)) 
layer_output = get_3rd_layer_output(X) 

Tuttavia, sarebbe un compito di ottimizzazione sostanzialmente più facile se avessi il gradiente. Come posso estrarre il gradiente dall'espressione Theano e inserirlo in una libreria di ottimizzazione Python come Scipy?

risposta

2

È possibile stampare il gradiente come descritto in here e codificarlo manualmente in Scipy. È inoltre possibile eseguire l'ottimizzazione in Theano - vedere this question.

Tuttavia, probabilmente l'approccio più straight-forward è quello di creare una funzione get_gradients() che utilizza theano.grad() restituire le pendenze dei filtri rispetto ad un ingresso, quindi chiamare scipy.optimize.minimize con jac=get_gradients. Secondo il documentation:

jac: bool o richiamabile, Jacobiana opzionale (gradiente) di funzione obiettivo . [...] jac può anche essere un callable restituendo il gradiente di all'obiettivo. In questo caso, deve accettare gli stessi argomenti del divertimento.

+0

Grazie. Capisco l'idea alla base di 'theano.grad()', ma come estrarre i gradienti rispetto alla perdita di un modello di Keras? Basato su https://github.com/fchollet/keras/blob/master/examples/conv_filter_visualization.py ho visto come questo può essere fatto usando alcuni input 'X_train', ma non ho capito come farlo la perdita. I miei due problemi sono 1) Non riesco a estrarre la funzione di perdita come connessa alla rete 2) Questa nuova funzione ha bisogno sia di 'X_train' che di' y_train', che non riesco a fornire nel modo giusto. – pir

+0

Keras calcola già i gradienti della perdita rispetto a ciascun livello, durante il backpropagation. Ma non vuoi i gradienti di uno strato intermedio rispetto all'input? –

+0

Ah, si. Scusa, è passato un po 'di tempo da quando ho fatto la domanda. La tua risposta lo risolve. Il mio attuale problema è come estrarre i gradienti su tutti i parametri wrt. la perdita, come voglio esaminare la necessità di ritaglio sfumato. È facile ottenere dalla prova del backprop implementata in Keras? – pir

Problemi correlati