2016-05-05 7 views
6

TensorFlowを使用して[Socher et al. 2011]のような再帰的ニューラルネットワークを実装する方法はありますか? これはTensorFlowによってうまくサポートされているリカレントニューラルネットワークとは異なることに注意してください。 違いは、ネットワークは線形の一連の操作に複製されず、ツリー構造に複製されることです。TensorFlowで再帰的ニューラルネットワークを実装するにはどうすればよいですか?

While opを使用して、自分のデータセットの各エントリのツリーデータ構造の幅優先横断のようなものを構築できると想像します。

While(もっと一般的です)と同様に、TensorFlowで新しいC++演算子としてツリートラバーサルを実装することは可能でしょうか?

+2

申し訳ありませんが、広すぎる –

+2

各サンプルを調べて、その場でグラフを作成できますか?現在の実装ではオーバーヘッドが発生します(グラフが変更されるたびに実行コールごとに1〜50ms程度)がありますが、そのオーバーヘッドを取り除く作業をしています。 –

答えて

5

現在、これらのモデルは、グラフ構造が入力に依存するため、TensorFlowで効率的かつきれいに実装することは非常に難しいです。それはまたminibatchingをすることを非常に難しくします。あなたが言及したwhileループのようなものを使うことは可能ですが、それをきれいにするのは簡単ではありません。

例ごとに新しいグラフを作成できますが、これは非常に面倒です。与えられた入力サイズに対して、適度に少ない数の可能なグラフを列挙してそれらの間で選択してまとめて構築することができますが、これは大きな入力に対しては不可能です。

また、複雑なtf.gatherロジックとマスクを使用してグラフを使って例題をルーティングすることもできますが、これはまた大きな苦痛となります。

最終的には、各サンプルのオンザフライでグラフを作成する方がおそらく最も簡単で、よりすぐれたスタイルの実行をサポートする将来の選択肢が存在する可能性があります。しかし、v0.8の時点で、私はこれが少し迷惑であり、ヤロスラフがコメントで述べたようにいくらかのオーバーヘッドを導入すると予想します。 https://github.com/bogatyy/cs224d/tree/master/assignment3 原則的にはバッチ処理が可能ですが、このようなモデルのカスタムC++コードと比較してどのようなパフォーマンスが得られるかわかりません。

6

あなたの推測は正しいです。tf.while_looptf.condを使用して静的グラフのツリー構造を表すことができます。詳細: https://github.com/bogatyy/cs224d/tree/master/assignment3

私の評価では、新しいツリーごとにグラフを再構築するのに比べて16倍の速さでトレーニングが行われます。

+0

例のおかげで...魅力のように動作します。すべてのトレーニングの例(Stanford Datasetの分割ごと)とトレーニングを実行したマシンのコンフィグレーションを使って、完全なエポックを実行するにはどれぐらいの時間がかかりましたか。ありがとう – roopalgarg

+0

Ivan、静的グラフの実装を使用するとき、どのようにミニバッチ処理を行うことができますか? あなたは簡単な説明をしたことを知りましたが、さらに詳しく説明できますか? ありがとう! – Want

関連する問題