2015-11-20 18 views
6

Ho addestrato un autoencoder usando lasagne/nolearn. Supponiamo che i livelli di rete siano [500, 100, 100, 500]. Mi sono allenato la rete neurale in questo modo:Lasagne/nolearn autoencoder - come ottenere l'output del livello nascosto?

net.fit(X, X) 

voglio fare qualcosa di simile al seguente:

net.predict(X, layer=2) 

così avrò la rappresentazione represso dei miei dati. Quindi, se i miei dati iniziali hanno una forma [10000, 500], i dati risultanti saranno [10000, 100].

Ho cercato ma non sono riuscito a trovare come farlo. E 'possibile con lasagne/nolearn?

risposta

2

Sembra che la risposta è qui nella documentazione: http://lasagne.readthedocs.org/en/latest/user/layers.html#propagating-data-through-layers

Qui ci sono le parti pertinenti:

per calcolare l'uscita di una rete, si dovrebbe invece chiamare lasagne.layers.get_output() su di esso. Questo attraverserà il grafico della rete .

È possibile chiamare questa funzione con lo strato che si desidera calcolare l'espressione output per:

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

In questo caso, l'espressione Theano saranno restituiti che rappresenta il uscita in funzione delle variabili di ingresso associato alla lasagne.layers.InputLayer istanza (o istanze) nella rete

...

È inoltre possibile specificare un Theano espressione da utilizzare come ingresso come secondo argomento lasagne.layers.get_output():

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

Supponendo net è di tipo nolearn.lasagne.NeuralNet sembra che si può ottenere l'accesso ai gli oggetti dello strato sottostante con net.get_all_layers(). Io non lo vedo nella documentazione, ma è here on line 592.

+0

Ciao ovve. Ho addestrato la rete usando nolearn in cima alle lasagne. Non penso di essere in grado di usare il codice sopra. L'oggetto 'net' non è usato nel codice. Mi manca qualcosa? – Stergios

+0

@Stergios Scusa, non ho capito che nolearn nasconde gli strati. Ho aggiornato la risposta. Nota Non ho testato questo codice. – ovolve

0

Invece di net.predict(X, layer=2), provo net.get_output(net.layers_[1], X), o net.get_output('name_of_layer_2' , X) se hai chiamato il vostro livello.