ゼロから作るDeep Learning3という本を読んでpythonの勉強をしています。
勉強しているコード
python
1class Variable: 2 def __init__(self, data): 3 self.data = data 4 self.grad = None 5 self.creator = None 6 7 def set_creator(self, func): #←ここがわからないです。creatorを設定するためのメソッドらしいです。 8 self.creator = func 9 10 def backward(self): 11 f = self.creator # 1. Get a function 12 if f is not None: 13 x = f.input # 2. Get the function's input 14 x.grad = f.backward(self.grad) # 3. Call the function's backward 15 x.backward() 16 17 18class Function: 19 def __call__(self, input): 20 x = input.data 21 y = self.forward(x) 22 output = Variable(y) 23 output.set_creator(self) # Set parent(function) 24 self.input = input 25 self.output = output # Set output 26 return output 27 28 def forward(self, x): 29 raise NotImplementedError() 30 31 def backward(self, gy): 32 raise NotImplementedError() 33 34 35class Square(Function): 36 def forward(self, x): 37 y = x ** 2 38 return y 39 40 def backward(self, gy): 41 x = self.input.data 42 gx = 2 * x * gy 43 return gx 44 45 46class Exp(Function): 47 def forward(self, x): 48 y = np.exp(x) 49 return y 50 51 def backward(self, gy): 52 x = self.input.data 53 gx = np.exp(x) * gy 54 return gx 55 56 57A = Square() 58B = Exp() 59C = Square() 60 61x = Variable(np.array(0.5)) 62a = A(x) 63b = B(a) 64y = C(b) 65 66# backward 67y.grad = np.array(1.0) 68y.backward() 69print(x.grad)
関数と変数の「つながり」をこーどに入れるには、通常の計算(順伝播)がおこなわれるタイミングで、上記コードのうち、下記の部分が該当するそうです。
該当のソースコード
python
1 self.creator = None 2 3 def set_creator(self, func): 4 self.creator = func
set_creatorというメソッドはいつ使われていますか。
コードとしては存在しているものの使われていない気がしてしかたないです。
例えば__init__(self, data)は
python
1x = Variable(np.array(0.5))
のコードで最初に呼ばれるんですよね。
backward(self)も
y.backward()
で実行されていると思います。
###質問したいこと
では、
set_creator(self, func)
は実行されるタイミングはいつでしょうか。
この本の後のほうのページをみてもイマイチ登場している気配を感じないです。
y.set_creator
のような記述があればまだわかるのですが。。
それとbackwardの使い方ですが、
y.Variable().backward
みたいな記述じゃなくて、クラスを飛ばして
y.backwardで成り立つのはなぜですか。
基礎からやり直してきてくださいと回答者さんから怒られそうですが、
基礎の本を勉強してても足し算やprinfのような、もっと基礎なことしか書いてなくて
該当の部分を見つけれずに困っています。ドットの部分はなんの説明もない本ばかりあたっています。
どうかお力を貸してください。
こういう基礎的な部分を勉強できるおすすめの方法も知っていたら教えてください。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/06/05 09:15