Update.
[dagnn.git] / README.md
index b122ee0..fbb7a96 100644 (file)
--- a/README.md
+++ b/README.md
@@ -1,13 +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,
+which inherits from nn.Container and allows to combine modules in an
+arbitrary graph without cycle.
 
-##Example##
+## Example ##
 
 A typical use would be:
 
-```Lua
+```lua
 model = nn.DAG()
 
 a = nn.Linear(100, 10)
@@ -42,56 +44,71 @@ which would encode the following graph
 
 and run a forward pass with a random batch of 30 samples.
 
-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.
+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##
+# Usage #
 
-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.
+## Input and output ##
 
-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)
+The DAG can deal with modules which take as input and produce as
+output tensors and nested tables of tensors.
 
-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.
+If a node has a single predecessor, the output of the latter is taken
+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 reflect the
+chronological order in which the edges where created in the
+DAG:connect() commands.
 
-#Usage#
+The input to the DAG (respectively the produced output) is a nested
+table of inputs reflecting the structure of the nested table of
+modules given as argument to DAG:setInput (respectively DAG:setOutput)
 
-##nn.DAG()##
+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 ##
+
+### 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 the nodes
-corresponding to pairs of successive modules.
+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)##
+### 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.
+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) ###
 
-Same as DAG:setInput.
+Similar to DAG:setInput().
 
-##nn.DAG:print()##
+### 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.
-
-##nn.DAG:updateOutput(input)##
+### nn.DAG:saveDot(filename) ###
 
-See the torch documentation.
+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
 
-##nn.DAG:updateGradInput(input, gradOutput)##
-
-See the torch documentation.
-
-##nn.DAG:accGradParameters(input, gradOutput, scale)##
-
-See the torch documentation.
+```
+dot graph.dot -T pdf -o graph.pdf
+```
 
+-- 
 *Francois Fleuret, Jan 13th, 2017*