2016-05-05 24 views
6

Esiste un modo per implementare una rete neurale ricorsiva come quella in [Socher et al. 2011] utilizzando TensorFlow? Si noti che questo è diverso dalle reti neurali ricorrenti, che sono ben supportate da TensorFlow. La differenza è che la rete non viene replicata in una sequenza lineare di operazioni, ma in una struttura ad albero.Come posso implementare una rete neurale ricorsiva in TensorFlow?

Immagino di poter utilizzare l'op While per costruire qualcosa come una traversata in ampiezza della struttura dei dati dell'albero per ogni voce del mio set di dati.

Forse sarebbe possibile implementare tree traversal come un nuovo C++ op in TensorFlow, simile a While (ma più generale)?

+2

Scusa amico ma troppo ampio –

+2

Potresti costruire il tuo grafico al volo dopo aver esaminato ogni esempio? L'attuale implementazione comporta un sovraccarico (forse 1-50ms per chiamata di corsa ogni volta che il grafico è stato modificato), ma stiamo lavorando per rimuovere quell'overhead e gli esempi sono utili. –

risposta

5

Attualmente, questi modelli sono molto difficili da implementare in TensorFlow in modo efficiente e pulito perché la struttura del grafico dipende dall'input. Ciò rende anche molto difficile fare il minibatching. È possibile utilizzare cose come il ciclo temporale che hai menzionato, ma farlo in modo pulito non è facile.

È possibile creare un nuovo grafico per ogni esempio, ma questo sarà molto fastidioso. Se, per una determinata dimensione di input, è possibile enumerare un numero ragionevolmente piccolo di grafici possibili, è possibile selezionarli e crearli tutti contemporaneamente, ma ciò non sarà possibile per input più grandi.

Puoi anche indirizzare gli esempi attraverso il tuo grafico con complicate tf.gather logiche e maschere, ma questo può anche essere un enorme dolore.

In definitiva, la creazione rapida del grafico per ogni esempio è probabilmente la più semplice e c'è la possibilità che in futuro ci siano alternative che supportino una migliore esecuzione immediata dello stile. Ma a partire dalla v0.8 mi aspetterei che questo sia un po 'fastidioso e introdurre alcuni overhead come menziona Yaroslav nel suo commento.

Edit: Dato che ho risposto, ecco un esempio utilizzando un grafico statico con cicli while: https://github.com/bogatyy/cs224d/tree/master/assignment3 io non sono sicuro di come performante viene confrontato con personalizzato codice C++ per i modelli di questo tipo, anche se in linea di principio potrebbe essere in batch.

6

L'ipotesi è corretta, è possibile utilizzare tf.while_loop e tf.cond per rappresentare la struttura ad albero in un grafico statico. Ulteriori informazioni: https://github.com/bogatyy/cs224d/tree/master/assignment3

Nella mia valutazione, rende l'allenamento 16 volte più veloce rispetto alla ricostruzione del grafico per ogni nuovo albero.

+0

grazie per l'esempio ... funziona come un fascino. È solo curioso di sapere quanto tempo ci è voluto per eseguire un'epoca completa con tutti gli esempi di allenamento (secondo la suddivisione Stanford Dataset) e la configurazione della macchina su cui hai svolto l'allenamento. Grazie – roopalgarg

+0

Ivan, come può essere fatto esattamente il mini-batching quando si utilizza l'implementazione del grafico statico? Ho visto che hai fornito una breve spiegazione, ma potresti approfondire ulteriormente? Grazie! – Want