From 0f78da6e360e8187c5b857aca8b3689a6478baed Mon Sep 17 00:00:00 2001 From: Mouhoub Massinissa Date: Mon, 24 Feb 2025 14:52:45 +0100 Subject: [PATCH] change backward method impl from recursive to stack --- micrograd/engine.py | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/micrograd/engine.py b/micrograd/engine.py index afd82cc5..234c6e6d 100644 --- a/micrograd/engine.py +++ b/micrograd/engine.py @@ -52,22 +52,21 @@ def _backward(): return out def backward(self): - - # topological order all of the children in the graph topo = [] visited = set() - def build_topo(v): + stack = [self] + + while stack: + v = stack.pop() if v not in visited: visited.add(v) - for child in v._prev: - build_topo(child) + stack.extend(v._prev) topo.append(v) - build_topo(self) + + self.grad = 1.0 + for node in topo: + node._backward() - # go one variable at a time and apply the chain rule to get its gradient - self.grad = 1 - for v in reversed(topo): - v._backward() def __neg__(self): # -self return self * -1