From 55332826c1d0ec125fc1d2db6644c98b1640d4a2 Mon Sep 17 00:00:00 2001 From: Francois Fleuret Date: Mon, 21 Aug 2017 07:42:22 +0200 Subject: [PATCH] Fixes and cleanup. --- agtree2dot.py | 30 ++++++++++++------------------ mlp.pdf | Bin 17251 -> 16495 bytes 2 files changed, 12 insertions(+), 18 deletions(-) diff --git a/agtree2dot.py b/agtree2dot.py index 7643986..8931e36 100755 --- a/agtree2dot.py +++ b/agtree2dot.py @@ -57,7 +57,7 @@ def slot_string(k, for_input): if k > 0: if not for_input: result = ' |' + result result += ' { <' + label + '0> 0' - for j in range(1, k+1): + for j in range(1, k + 1): result += " | " + '<' + label + str(j) + '> ' + str(j) result += " } " if for_input: result = result + '| ' @@ -67,29 +67,30 @@ def slot_string(k, for_input): ###################################################################### def add_link(node_list, link_list, u, nu, v, nv): - link = Link(u, nu, v, nv) - link_list.append(link) - node_list[u].max_in = max(node_list[u].max_in, nu) - node_list[v].max_out = max(node_list[u].max_out, nv) + if u is not None and v is not None: + link = Link(u, nu, v, nv) + link_list.append(link) + node_list[u].max_in = max(node_list[u].max_in, nu) + node_list[v].max_out = max(node_list[v].max_out, nv) ###################################################################### -def build_ag_graph_lists(u, node_labels, out, node_list, link_list): +def build_ag_graph_lists(u, node_labels, node_list, link_list): - if not u in node_list: + if u is not None and not u in node_list: node = Node(len(node_list) + 1, (u in node_labels and node_labels[u]) or \ re.search('', str(type(u))).group(2)) node_list[u] = node if isinstance(u, torch.autograd.Variable): - build_ag_graph_lists(u.grad_fn, node_labels, out, node_list, link_list) + build_ag_graph_lists(u.grad_fn, node_labels, node_list, link_list) add_link(node_list, link_list, u, 0, u.grad_fn, 0) else: if hasattr(u, 'next_functions'): i = 0 for v, j in u.next_functions: - build_ag_graph_lists(v, node_labels, out, node_list, link_list) + build_ag_graph_lists(v, node_labels, node_list, link_list) add_link(node_list, link_list, u, i, v, j) i += 1 @@ -122,15 +123,8 @@ def print_dot(node_list, link_list, out): ###################################################################### def save_dot(x, node_labels = {}, out = sys.stdout): - node_list = {} - link_list = [] - build_ag_graph_lists(x, node_labels, out, node_list, link_list) + node_list, link_list = {}, [] + build_ag_graph_lists(x, node_labels, node_list, link_list) print_dot(node_list, link_list, out) ###################################################################### - -# x = Variable(torch.rand(5)) -# y = torch.topk(x, 3) -# l = torch.sqrt(torch.norm(y[0]) + torch.norm(5.0 * y[1].float())) - -# save_dot(l, { l: 'variable l' }, open('/tmp/test.dot', 'w')) diff --git a/mlp.pdf b/mlp.pdf index 4abdf28d7270b9be3497a99695924642743f64ab..0f41f8131d27832267aff919d6a12e58793dbfe1 100644 GIT binary patch delta 14951 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 delta 15717 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 gOUTK^{J$3D