5

Ho costruito alcune reti neurali con TensorFlow, come MLP di base e reti neurali convoluzionali. Ora voglio passare a reti neurali ricorrenti. Tuttavia, non ho esperienza nell'elaborazione del linguaggio naturale. Pertanto le esercitazioni di NLP su TensorFlow per gli RNN non sono facili da leggere per me (e nemmeno molto interessanti).TensorFlow: semplice rete neurale ricorrente

Fondamentalmente voglio iniziare con qualcosa di semplice, non un LSTM.

Come si costruisce una semplice rete neurale ricorrente, come una rete Elman, in TensorFlow?

Sono stato in grado di trovare solo esempi RNN GRU o LSTM per TensorFlow, principalmente per NLP. Qualcuno sa di alcuni tutorial o esempi di reti neurali ricorrenti per TensorFlow?

Questa figura mostra una rete di base Elman, che viene spesso chiamato semplicemente SRN (semplice rete ricorrente):

elman network example

risposta

1

Una possibilità è quella di utilizzare il built-in RNNCell situato in tensorflow/python/ops/rnn_cell.py.

Se non si desidera farlo, è possibile creare il proprio RNN. Il RNN si allenerà utilizzando la propagazione del dorso nel tempo. Prova a srotolare la rete un numero fisso di passaggi, ad es. considera le sequenze di input di lunghezza dieci. Quindi puoi scrivere un loop in python per fare tutte le moltiplicazioni della matrice per ogni fase della rete. Ogni volta puoi prendere l'output dal passaggio precedente e concatenarlo con l'input per quel passo. Non saranno troppe righe di codice per farlo funzionare.

+0

Ho provato a creare qualcosa con la cella RNN ma non ho avuto molto successo. Finisco sempre con 'raise TypeError (" input deve essere una lista ")' o 'TypeError: tipo inanimato: 'list'' quando fornisco una matrice numpy o una lista. Inoltre, a cosa serve esattamente lo 'stato? Ho pensato che fosse il vettore più recente fuori dal livello di contesto, ma perché sarebbe necessario un esplicito 'Tensore 2D con forma [batch_size x self.state_size]' poi (secondo i documenti)? Potresti fornire un esempio? – daniel451

+1

Sì, lo stato è il vettore di contesto più recente. Di solito si elaborano più sequenze insieme in un batch. Quindi il tensore 2d è i vettori di stato di ciascuna delle sequenze nel batch. – Aaron

+0

https://github.com/rajarsheem/playing-with-RNNs/blob/master/int_seq.ipynb Dai un'occhiata a questo. Se hai bisogno di spiegazioni, crea un problema lì. –