回答編集履歴
2
edit
test
CHANGED
@@ -23,3 +23,49 @@
|
|
23
23
|
|
24
24
|
|
25
25
|
ちなみに微分できないと自動微分できません。
|
26
|
+
|
27
|
+
|
28
|
+
|
29
|
+
---
|
30
|
+
|
31
|
+
|
32
|
+
|
33
|
+
define-and-runだとif文を挟んだ際にif文の分岐分だけグラフのパターンが分かれてしまうため、一般に論理構造を含む実装は困難です。
|
34
|
+
|
35
|
+
TensorflowのEagerモードなど、define-by-runで動的にグラフを形成する場合は実装が少々簡単になります。
|
36
|
+
|
37
|
+
グラフを計算するときは具体的に入力値が定まっているときなので常にグラフは分岐しない一本道になります。
|
38
|
+
|
39
|
+
|
40
|
+
|
41
|
+
以下コメント欄を転記。
|
42
|
+
|
43
|
+
|
44
|
+
|
45
|
+
http://tensorflow.classcat.com/2018/07/17/tensorflow-tutorials-automatic-differentiation/
|
46
|
+
|
47
|
+
https://www.tensorflow.org/guide/eager#computing_gradients
|
48
|
+
|
49
|
+
|
50
|
+
|
51
|
+
上の2つのリンクをたどってみてください。
|
52
|
+
|
53
|
+
|
54
|
+
|
55
|
+
Eagerの場合逐次実行できるのでGradientTapeというもので計算のフローをたどることができます。
|
56
|
+
|
57
|
+
遅延評価されるので、入力を実際に与えたときに初めてフローが形成されます。
|
58
|
+
|
59
|
+
なので、実は途中でif文を大量に挟んでも問題ありません。
|
60
|
+
|
61
|
+
if文があっても、特別な入力に対しては一つのフローにならなければならないからです。
|
62
|
+
|
63
|
+
これは動的にグラフ形成を許すEagerモードならではの実装だと思われます。
|
64
|
+
|
65
|
+
|
66
|
+
|
67
|
+
結論としては、
|
68
|
+
|
69
|
+
①シンボリックには計算していません
|
70
|
+
|
71
|
+
②特定の値に対して計算フローを形成するので、必ず一本道になり、単純な自動微分に帰結します
|
1
edit
test
CHANGED
@@ -15,3 +15,11 @@
|
|
15
15
|
|
16
16
|
|
17
17
|
https://github.com/tensorflow/tensorflow/blob/master/tensorflow/cc/gradients/math_grad.cc
|
18
|
+
|
19
|
+
|
20
|
+
|
21
|
+
---
|
22
|
+
|
23
|
+
|
24
|
+
|
25
|
+
ちなみに微分できないと自動微分できません。
|