From 765afb07c2781c92805461eb937d611fe03ca9bf Mon Sep 17 00:00:00 2001 From: Francois Fleuret Date: Sun, 20 May 2018 23:02:26 +0200 Subject: [PATCH] Update. --- README.md | 10 ++++------ mlp.pdf | Bin 10377 -> 10644 bytes 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index f290eca..6980672 100644 --- a/README.md +++ b/README.md @@ -20,12 +20,9 @@ resulting graph. A typical use is provided in [mlp.py](https://fleuret.org/git-extract/agtree2dot/mlp.py): ```python -import subprocess - from torch import nn from torch.nn import functional as fn from torch import Tensor -from torch.autograd import Variable from torch.nn import Module import agtree2dot @@ -43,8 +40,8 @@ class MLP(Module): return x mlp = MLP(10, 20, 1) -input = Variable(Tensor(100, 10).normal_()) -target = Variable(Tensor(100).normal_()) +input = Tensor(100, 10).normal_() +target = Tensor(100, 1).normal_() output = mlp(input) criterion = nn.MSELoss() loss = criterion(output, target) @@ -64,7 +61,8 @@ agtree2dot.save_dot(loss, print('Generated mlp.dot') try: - subprocess.check_call(["dot", "mlp.dot", "-Lg", "-T", "pdf", "-o", "mlp.pdf" ]) + subprocess.check_call(['dot', 'mlp.dot', '-Lg', '-T', 'pdf', '-o', 'mlp.pdf' ]) + except subprocess.CalledProcessError: print('Calling the dot command failed. Is Graphviz installed?') sys.exit(1) diff --git a/mlp.pdf b/mlp.pdf index a72a3b70687ad164866a8d9c761fb5858f00c7c2..0a7b85860554c5a6da9dfe32bae50b71638bc0a6 100644 GIT binary patch delta 9022 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 Ir6P^|KkFTv9{>OV -- 2.20.1