2016-01-28 11 views
14

Ho una serie temporale di lunghezza t (x0, ..., xt) ognuno dei xi è un vettore d-dimensione cioè xi = (x0i, x1i, ...., xdi) . Quindi il mio input X è di forma [batch_size, d]Ingresso in rete LSTM tensorflow

L'input per il LFTM di tensorflow deve essere di dimensione [batchSize, hidden_size]. La mia domanda è come devo inserire le mie serie temporali sull'LSTM. Una possibile soluzione che ho pensato è di avere una matrice di peso aggiuntiva, W, di dimensione [d, dimensione_setto] e di inserire l'LSTM con X * W + B.

È corretto o devo inserire qualcos'altro per netwo ר k?

Grazie

+1

Quando si parla di X, si specifica batch_size, ma per LSTM si parla di batchSize. Sono la stessa cosa? – Sycorax

risposta

15

L'intuizione è corretta; ciò di cui hai bisogno (e ciò che hai descritto) è un incorporamento per tradurre il tuo vettore di input nella dimensione dell'input del tuo LSTM. Ci sono tre modi principali che conosco per ottenere ciò.

  • Si potrebbe fare questo manualmente con un ulteriore matrice peso W e polarizzazione vettore b come avete descritto.
  • È possibile creare automaticamente la matrice di peso e i vettori di bias utilizzando la funzione linear()from TensorFlow's rnn_cell.py library. Quindi passa l'output di tale livello lineare come input del tuo LSTM quando crei il tuo LSTM tramite la funzione rnn_decoder()in Tensorflow's seq2seq.py library o in altro modo.
  • Oppure è possibile che Tensorflow crei questo embedding e lo colleghi automaticamente agli ingressi del LSTM, creando l'LSTM tramite la funzione embedding_rnn_decoder() alla riga 141 della stessa libreria seq2seq. (Se si traccia attraverso il codice per questa funzione senza argomenti opzionali, vedrete che si tratta semplicemente di creare uno strato di embedding lineare per l'ingresso e il LSTM e agganciandoli insieme.)

A meno che non ho bisogno di accedere ai singoli componenti che stai creando per qualche motivo, ti consiglierei la terza opzione per mantenere il tuo codice ad un livello elevato.

+0

Questa terza soluzione funziona davvero in questo caso? Puoi usare embedding_rnn_decoder() per un tensore di input sparse ma multidimensionale? Sembra che questa funzione ricerchi un embedding dato un intero unidimensionale o una codifica a caldo, ma non un modo per modificare semplicemente la dimensionalità di un vettore di input usando una matrice di peso. – bschreck