From: Francois Fleuret Date: Fri, 13 Jan 2017 06:43:51 +0000 (+0100) Subject: Renamed DAG:addEdge to DAG:connect X-Git-Url: https://fleuret.org/cgi-bin/gitweb/gitweb.cgi?a=commitdiff_plain;h=9dad4fa1118632bfa02c01e4d6a8a5a129061a54;p=dagnn.git Renamed DAG:addEdge to DAG:connect --- diff --git a/README.md b/README.md index 91c7684..2ff5b99 100644 --- a/README.md +++ b/README.md @@ -14,11 +14,11 @@ c = nn.Linear(10, 15) d = nn.CMulTable() e = nn.Linear(15, 15) -model:addEdge(a, b) -model:addEdge(b, nn.Linear(10, 15), nn.ReLU(), d) -model:addEdge(b, c) -model:addEdge(c, d) -model:addEdge(c, nn.Mul(-1), e) +model:connect(a, b) +model:connect(b, nn.Linear(10, 15), nn.ReLU(), d) +model:connect(b, c) +model:connect(c, d) +model:connect(c, nn.Mul(-1), e) model:setInput(a) model:setOutput({ d, e }) @@ -40,14 +40,14 @@ which would encode the following graph and run a forward pass with a random batch of 30 samples. -Note that DAG:addEdge allows to add a bunch of edges at once. This is particularly useful to add anonymous modules which have a single predecessor and successor. +Note that DAG:connect allows to add a bunch of edges at once. This is particularly useful to add anonymous modules which have a single predecessor and successor. #Input and output# -If a node has a single successor, its output is sent unchanged as input to that successor. If it has multiple successors, the outputs are collected into a table, and the table is used as input to the successor node. The indexes of the outputs in that table reflects the order in which they appear in the addEdge commands. +If a node has a single successor, its output is sent unchanged as input to that successor. If it has multiple successors, the outputs are collected into a table, and the table is used as input to the successor node. The indexes of the outputs in that table reflects the order of the DAG:connect() commands. The expected input (respectively the produced output) is a nested table of inputs reflecting the structure of the nested table of modules provided to DAG:setInput (respectively DAG:setOutput) So for instance, in the example above, the model expects a tensor as input, since it is the input to the module a, and its output will is a table composed of two tensors, corresponding to the outputs of d and e respectively. -*Francois Fleuret, Jan 12th, 2017* +*Francois Fleuret, Jan 13th, 2017* diff --git a/dagnn.lua b/dagnn.lua index c6d54ad..9203264 100755 --- a/dagnn.lua +++ b/dagnn.lua @@ -42,7 +42,7 @@ end -- The main use should be to add an edge between two modules, but it -- can also add a full sequence of modules -function DAG:addEdge(...) +function DAG:connect(...) self.sorted = nil local prev for _, nnm in pairs({...}) do diff --git a/test-dagnn.lua b/test-dagnn.lua index 53302fd..366e98f 100755 --- a/test-dagnn.lua +++ b/test-dagnn.lua @@ -76,13 +76,13 @@ function printTensorTable(t) end end --- +- Linear(10, 10) -> ReLU ---> d --+ --- / / \ --- / / \ --- --> a --> b -----------> c --------------+ e --> --- \ / --- \ / --- +-- Mul(-1) --------+ +-- +-- Linear(10, 10) --> ReLU --> d --+ +-- / / \ +-- / / \ +-- --> a --> b -----------> c --------------+ e --> +-- \ / +-- \ / +-- +----- Mul(-1) ------+ model = nn.DAG() @@ -92,12 +92,12 @@ c = nn.Linear(10, 15) d = nn.CMulTable() e = nn.CAddTable() -model:addEdge(a, b) -model:addEdge(b, nn.Linear(10, 15), nn.ReLU(), d) -model:addEdge(d, e) -model:addEdge(b, c) -model:addEdge(c, d) -model:addEdge(c, nn.Mul(-1), e) +model:connect(a, b) +model:connect(b, nn.Linear(10, 15), nn.ReLU(), d) +model:connect(d, e) +model:connect(b, c) +model:connect(c, d) +model:connect(c, nn.Mul(-1), e) model:setInput(a) model:setOutput(e) @@ -109,4 +109,5 @@ output:uniform() print('Error = ' .. checkGrad(model, nn.MSECriterion(), input, output)) +print('Writing /tmp/graph.dot') model:dot('/tmp/graph.dot')