2015-12-24 8 views
5

Dla ConvNet może być interesujące znalezienie wejścia ograniczonego do normy, które maksymalizuje aktywność pojedynczego konwertera. filtr jako sposób na visualize the filters. Chciałbym to zrobić w pakiecie głębokiego uczenia Keras. Można to zrobić za pomocą algorytmu optymalizacji czarnej skrzynki z kodem z FAQ.Gradient z wyrażenia Theano dla wizualizacji filtru w 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) 

Byłoby jednak znacznie łatwiejsze zadanie optymalizacji, gdybym miał gradient. Jak wyodrębnić gradient z wyrażenia Theano i wprowadzić go do biblioteki optymalizacji Pythona, takiej jak Scipy?

Odpowiedz

2

Możesz wydrukować gradient zgodnie z opisem here i ręcznie zakodować go w Scipy. Możesz także przeprowadzić optymalizację w Theano - patrz this question.

Jednak chyba podejście najprostsza jest tworzenie funkcji get_gradients() który wykorzystuje theano.grad() powrotu gradientów filtrów w odniesieniu do danych wejściowych, a następnie wywołać scipy.optimize.minimize z jac=get_gradients. Według documentation:

jac: BOOL lub wywoływalny opcjonalnie jakobian (gradient) obiektywnego funkcji. [...] jac może być również wywoływalny, zwracając gradient celu o . W takim przypadku musi zaakceptować te same argumenty, co zabawa.

+0

Dzięki. Rozumiem podstawową ideę 'theano.grad()', ale jak wyodrębnić gradienty w odniesieniu do straty dla modelu Keras? Na podstawie https://github.com/fchollet/keras/blob/master/examples/conv_filter_visualization.py widziałem, jak można to zrobić za pomocą jakiegoś wejścia 'X_train', ale nie mam pojęcia, jak to zrobić dla strata. Moje dwa problemy to: 1) Nie mogę wydobyć funkcji utraty połączenia z siecią 2) Ta nowa funkcja wymaga zarówno "X_train", jak i "y_train", czego nie mogę zapewnić we właściwy sposób. – pir

+0

Keras oblicza już gradienty strat w odniesieniu do każdej warstwy, podczas wstecznej propagacji. Ale czy nie chcesz gradientów warstwy pośredniej w odniesieniu do danych wejściowych? –

+0

Ah, tak. Niestety, minęło trochę czasu, odkąd zadałem to pytanie. Twoja odpowiedź rozwiązuje to. Mój obecny problem polega na wyodrębnianiu gradientów między wszystkimi parametrami. straty, ponieważ chcę zbadać potrzebę przycinania gradientowego. Czy łatwo jest uzyskać dostęp do dowodów bezpieczeństwa, które zostały zaimplementowane w Keras? – pir

Powiązane problemy