From: Francois Fleuret Date: Thu, 12 Jan 2017 17:46:15 +0000 (+0100) Subject: Initial commit. X-Git-Url: https://www.fleuret.org/cgi-bin/gitweb/gitweb.cgi?p=dagnn.git;a=commitdiff_plain;h=34eff36879f9b2fa3ec1130fccb723c5b907a586 Initial commit. --- diff --git a/README.md b/README.md new file mode 100644 index 0000000..3b8d274 --- /dev/null +++ b/README.md @@ -0,0 +1,51 @@ + +This package implements a new module nn.DAG which inherits from nn.Container and allows to combine modules in an arbitrary graph without cycle. + +#Example# + +The typical use is: + +```Lua +model = nn.DAG() + +a = nn.Linear(100, 10) +b = nn.ReLU() +c = nn.Linear(10, 15) +d = nn.Linear(10, 15) +e = nn.CMulTable() +f = nn.Linear(15, 15) + +model:addEdge(a, b) +model:addEdge(b, c) +model:addEdge(b, d) +model:addEdge(c, e) +model:addEdge(d, e) +model:addEdge(d, f) + +model:setInput(a) +model:setOutput({ e, f }) + +input = torch.Tensor(300, 100):uniform() +output = model:updateOutput(input):clone() + +``` + +which would encode the following graph + + +--> c ----> e --> + / / + / / + input --> a --> b ----> d ---+ output + \ + \ + +--> f --> + +#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. + +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 DAG 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 e and f respectively. + +*Francois Fleuret, Jan 12th, 2017*