X-Git-Url: https://www.fleuret.org/cgi-bin/gitweb/gitweb.cgi?a=blobdiff_plain;f=README.md;h=436aa63d1c585c267e8ee40756f23588a01765b0;hb=5a149d40e14c1931103514b41c56a4139f06973a;hp=91c7684fbb5628bd8af89a4e5086fd31a2bef601;hpb=97142a40458218b9674a2fc9fc8876f2b38531f5;p=dagnn.git diff --git a/README.md b/README.md index 91c7684..436aa63 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,11 @@ -This package implements a new module nn.DAG which inherits from nn.Container and allows to combine modules in an arbitrary graph without cycle. +#Introduction# -#Example# +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## A typical use would be: @@ -14,11 +18,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 +44,77 @@ 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 predecessor, its output is taken as-is. If it +has multiple predecessors, all the outputs are collected into a table, +and the table is used as input. The indexes of the outputs in that +table reflects the order in which the predecessors appeared in the +DAG:connect() commands. + +The input to the DAG (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. + +##Usage## + +###nn.DAG()### + +Create a new empty DAG, which inherits from nn.Container. + +###nn.DAG:connect([module1 [, module2 [, ...]]])### + +Add new nodes corresponding to the modules passed as arguments if they +are not already existing. Add edges between every two nodes +corresponding to a pair of successive modules in the arguments. + +Calling it with n > 2 arguments is strictly equivalent to calling it +n-1 times on the pairs of successive arguments. + +###nn.DAG:setInput(i)### + +Defines the content and structure of the input. The argument should be +either a module, or a (nested) table of module. The input to the DAG +should be a (nested) table of inputs with the corresponding structure. + +###nn.DAG:setOutput(o)### + +Similar to DAG:setInput(). + +###nn.DAG:print()### + +Prints the list of nodes. + +###nn.DAG:saveDot(filename)### + +Save a dot file to be used by the Graphviz set of tools for graph +visualization. This dot file can than be used for instance to produce +a pdf file with + +``` +dot graph.dot -T pdf -o graph.pdf +``` + +###nn.DAG:updateOutput(input)### + +See the torch documentation. -#Input and output# +###nn.DAG:updateGradInput(input, gradOutput)### -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. +See the torch documentation. -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) +###nn.DAG:accGradParameters(input, gradOutput, scale)### -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. +See the torch documentation. -*Francois Fleuret, Jan 12th, 2017* +-- +*Francois Fleuret, Jan 13th, 2017*