前提・実現したいこと
pythonの勉強本でわからないことがあったので質問させてください。
「ゼロから作るDeep Learning3 フレームワーク編」で質問です。
https://zenn.dev/koki0702/books/a2f1689cb67723433e22/viewer/4c31b5b7c1786037df9c
読んだことのある人教えてください。
該当のソースコード
class Variable: def __init__(self, data): self.data = data self.grad = None self.creator = None def set_creator(self, func): self.creator = func def backward(self): f = self.creator if f is not None: x = f.input x.grad = f.backward(self.grad) x.backward()
をループを使った実装に変更して下記のよう(目的はメモリの節約)に変えるらしいのです。
class Variable: def __init__(self, data): self.data = data self.grad = None self.creator = None def set_creator(self, func): self.creator = func def backward(self): funcs = [self.creator] while funcs: f = funcs.pop() # 関数を取得 x, y = f.input, f.output # 関数の入出力を取得 x.grad = f.backward(y.grad) # backwardメソッドを呼ぶ if x.creator is not None: funcs.append(x.creator) # 1つ前の関数をリストに追加
わからないこと
while func: はどういう意味ですか。
funcsはリストです。while 変数 <5なら
変数が5以下の時だけループするとわかるのですが、whileリストだとリストがどうなるかよくわらないです。
while 変数<5なら変数 +=1として
送っていきますが、while リストの場合送っていくこともしているように見えないのが疑問です。
もう一つ、このコードでpopメソッドとappendメソッドがどういう役割を果たしているのかもわからないです。
popメソッドとappendメソッド、それぞれ単体での意味は分かります。
わかりやすい説明いただけると助かります。よろしくお願いします。
回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/05/24 15:09
2021/05/25 00:58 編集
2021/05/25 15:32