2016-05-05 15 views
6

Czy jest jakiś sposób wdrożenia rekurencyjnej sieci neuronowej, takiej jak ta w [Socher et al. 2011] przy użyciu TensorFlow? Należy zauważyć, że różni się to od nawracających sieci neuronowych, które są dobrze obsługiwane przez TensorFlow. Różnica polega na tym, że sieć nie jest replikowana w liniowej sekwencji operacji, ale w strukturze drzewa.Jak mogę zaimplementować rekurencyjną sieć neuronową w TensorFlow?

Wyobrażam sobie, że mogę użyć opcji While do skonstruowania czegoś w rodzaju pierwszego przejścia struktury danych drzewa dla każdego wpisu z mojego zestawu danych.

Być może byłoby możliwe zaimplementowanie drzewa jako nowego oparta na C++ w TensorFlow, podobnego do While (ale bardziej ogólne)?

+2

Przepraszam, ale za szeroki –

+2

Czy możesz zbudować swój wykres w locie po zbadaniu każdego przykładu? Obecna implementacja powoduje obciążenie (być może 1-50ms na każde wywołanie za każdym razem, gdy wykres został zmodyfikowany), ale pracujemy nad usunięciem tego obciążenia i przykłady są użyteczne. –

Odpowiedz

5

Obecnie modele te są bardzo trudne do wdrożenia wydajnie i czysto w TensorFlow, ponieważ struktura wykresu zależy od danych wejściowych. To także sprawia, że ​​bardzo ciężko jest robić mikroukłady. Możliwe jest użycie takich rzeczy, jak wspomniana pętla while, ale robienie jej czysto nie jest łatwe.

Można zbudować nowy wykres dla każdego przykładu, ale będzie to bardzo denerwujące. Jeśli, dla danego rozmiaru wejściowego, możesz wyliczyć stosunkowo małą liczbę możliwych wykresów, które możesz wybrać między nimi i zbudować je wszystkie naraz, ale nie będzie to możliwe przy większych wejściach.

Możesz także poprowadzić przykłady za pomocą skomplikowanej logiki i masek, ale może to być również bardzo uciążliwe.

Ostatecznie, tworzenie wykresu w locie dla każdego przykładu jest prawdopodobnie najłatwiejsze i istnieje szansa, że ​​w przyszłości pojawią się alternatywy, które wspomagają lepsze natychmiastowe wykonanie stylu. Ale od wersji 0.8 spodziewam się, że będzie to nieco denerwujące i wprowadzę pewne koszty, jak wspomina Jarosław w swoim komentarzu.

Edit: Od Odpowiedziałem, tutaj jest przykład przy użyciu statycznej wykres z pętli while: https://github.com/bogatyy/cs224d/tree/master/assignment3 nie jestem pewien, jak wydajnych jest to w porównaniu do niestandardowego kodu C++ dla modeli takich jak ta, choć w zasadzie mógłby być dozowane.

6

Twoje przypuszczenie jest poprawne, możesz użyć tf.while_loop i tf.cond do reprezentowania struktury drzewa na statycznym wykresie. Więcej informacji: https://github.com/bogatyy/cs224d/tree/master/assignment3

W mojej ocenie, trening jest 16 razy szybszy w porównaniu do ponownego budowania wykresu dla każdego nowego drzewa.

+0

dzięki za przykład ... działa jak urok. Ciekawe, ile czasu zajęło ukończenie jednej pełnej epoki ze wszystkimi przykładami szkolenia (zgodnie z podziałem Stanford Dataset) i konfiguracją maszyny, w której prowadziłeś szkolenie. Dzięki – roopalgarg

+0

Ivan, jak dokładnie można zrobić mini-batchowanie podczas korzystania z implementacji statycznego wykresu? Widziałem, że dostarczyłeś krótkie wyjaśnienie, ale czy mógłbyś dalej rozwinąć? Dzięki! – Want

Powiązane problemy