X-Git-Url: https://www.fleuret.org/cgi-bin/gitweb/gitweb.cgi?a=blobdiff_plain;f=README.md;h=3df18f5a24e81ae09837bf704479818ae288844e;hb=f13855d442ddf0fc5dbecbd25622eadb67685ffb;hp=1d6f5bd811b5706b39890c13fe4d5404dc7768c1;hpb=07a8c54a66b01f342e4d03ca2cf99710d56806d0;p=dagnn.git diff --git a/README.md b/README.md index 1d6f5bd..3df18f5 100644 --- a/README.md +++ b/README.md @@ -1,15 +1,15 @@ -#Introduction# +# Introduction # -This package implements a new module nn.DAG which inherits from -nn.Container and allows to combine modules in an arbitrary graph -without cycle. +This package implements a new module nn.DAG for the [torch framework](https://torch.ch), +which inherits from [nn.Container](https://github.com/torch/nn/blob/master/Container.lua) and allows to combine modules in an +arbitrary [Directed Acyclic Graph (DAG).](https://en.wikipedia.org/wiki/Directed_acyclic_graph) -##Example## +## Example ## A typical use would be: -```Lua +```lua model = nn.DAG() a = nn.Linear(100, 10) @@ -48,58 +48,59 @@ 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. -#Usage# +# Usage # -##Input and output## +## Input and output ## The DAG can deal with modules which take as input and produce as output tensors and nested tables of tensors. If a node has a single predecessor, the output of the latter is taken -as-is as the input of the former. If it has multiple predecessors, all +as-is as the input to the former. 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 edges where created in the DAG:connect() commands. +input. The indexes of the outputs in that table reflect the +chronological order in which the edges where created 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) +modules given as argument 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. -##Functions## +## Functions ## -###nn.DAG()### +### nn.DAG() ### Create a new empty DAG, which inherits from nn.Container. -###nn.DAG:connect([module1 [, module2 [, ...]]])### +### 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. +have not been already added in a previous call. Add edges between +every two nodes associated to two 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. +Calling this function with n > 2 arguments is strictly equivalent to +calling it n-1 times on the pairs of successive arguments. -###nn.DAG:setInput(i)### +### nn.DAG:setInput(i) ### Defines the content and structure of the input. The argument should be either a module, or a (nested) table of modules. The input to the DAG should be a (nested) table of inputs, with the corresponding structure. -###nn.DAG:setOutput(o)### +### nn.DAG:setOutput(o) ### Similar to DAG:setInput(). -###nn.DAG:print()### +### nn.DAG:print() ### Prints the list of nodes. -###nn.DAG:saveDot(filename)### +### 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