2015-11-20 39 views
6

Wyszkoliłem automatyczny koder przy użyciu lasagne/nolearn. Załóżmy, że warstwy sieciowe to [500, 100, 100, 500]. Trenowałem sieć neuronową tak:Lasagne/nolearn autoencoder - jak uzyskać ukrytą warstwę wyjściową?

net.fit(X, X) 

chcę zrobić coś jak następuje:

net.predict(X, layer=2) 

więc będę miał stłumiony reprezentację moich danych. Tak więc, jeśli moje początkowe dane mają kształt [10000, 500], wynikowe dane będą [10000, 100].

Szukałem, ale nie mogłem znaleźć, jak to zrobić. Czy to możliwe z lasagne/nolearn?

Odpowiedz

2

Wygląda na to, że odpowiedź jest tu w dokumentacji: http://lasagne.readthedocs.org/en/latest/user/layers.html#propagating-data-through-layers

Oto odpowiednie części:

Aby obliczyć moc sieci, należy zamiast zadzwonić lasagne.layers.get_output() na nim. To przejdzie przez wykres sieci .

Można wywołać tę funkcję z warstwą chcesz obliczyć wyrażenie wyjściowy dla:

>>> y = lasagne.layers.get_output(l_out) 

W takim przypadku zostaną zwrócone wyrażenie Theano który reprezentuje wyjście w zależności od zmiennych wejściowych związane z lasagne.layers.InputLayer instancji (lub instancji) w sieci

...

można również określić Theano Wyrażenie użyć jako wejścia jako drugi argument do lasagne.layers.get_output():

>>> x = T.matrix('x') 
>>> y = lasagne.layers.get_output(l_out, x) 
>>> f = theano.function([x], y) 

Zakładając net jest typu nolearn.lasagne.NeuralNet wygląda jak można uzyskać dostęp do podstawowych obiektów warstwowych z net.get_all_layers(). Nie widzę go w dokumentacji, ale to here na linii 592.

+0

Witaj, ovolve. Trenowałem sieć za pomocą nolearn na szczycie lasagne. Nie sądzę, żebym mógł użyć powyższego kodu. Obiekt "net" nie jest używany w kodzie. Czy coś mi brakuje? – Stergios

+0

@Stergios Niestety, nie zdawałem sobie sprawy, że nolearn ukrywa warstwy. Zaktualizowałem odpowiedź. Uwaga: Nie testowałem tego kodu. – ovolve

0

Zamiast net.predict(X, layer=2), spróbuj net.get_output(net.layers_[1], X) lub net.get_output('name_of_layer_2' , X) jeśli już nazwał swoją warstwę.