2016-09-19 7 views
3

TensorFlowがtf.train.GradientDescentOptimizerのグラデーションをどのように計算するかを理解しようとしています。TensorFlowはtf.train.GradientDescentOptimizerのグラデーションをどのように計算しますか?

TensorFlowホワイトペーパーのセクション4.1を正しく理解すると、元のグラフのノードの導出を計算するノードをTensorFlowグラフに追加することで、バックプロパゲーションに基づいてグラディエントを計算します。 TensorFlow Cは異なりIれているいくつかのテンソルに対してテンソルCの勾配を計算する必要がある場合

、それは最初のCにIから計算グラフ内のパスを見つけそしてそれは、CからIまで後戻り後方パス上の各操作について、ノードをTensorFlowグラフに追加し、チェーンルールを使用して後方パスに沿って部分勾配を構成する。新たに追加されたノードは、往路の対応する演算の「勾配関数」を計算する。任意の操作によって勾配関数を登録することができる。この関数は、逆方向パスに沿って既に計算された部分勾配だけでなく、オプションで順方向操作の入力と出力を入力として取ります。 [Section 4.1 TensorFlow whitepaper]

質問1:オリジナルTensorFlowノードの派生を表す各TensorFlowノードの第2ノードの実装がありますか?

質問2:どの派生ノードがグラフ(またはログ)に追加されるのかを視覚化する方法はありますか?

答えて

5

各ノードは、バックプロパゲーション値(Pythonでops.RegisterGradient(「和」)@のようなものを使用して登録)

を計算し、対応するメソッドを取得します。しかしこの方法here

を使用してグラフを可視化することができます、ということに注意してください。自動微分コードはある範囲の条件で動作することを意図しているので、それが作成するグラフは非常に複雑であり、見るのはそれほど有用ではありません。 1-2ノードで実装可能な単純な勾配計算のために10 opsノードを持つことは珍しいことではありません。

+0

カーネルの各ノードに対してバックプロパテート値を計算するメソッドは自動的に生成されますか? – Paul

+0

はカーネルごとに手作業で実装されています –

関連する問題