projects
/
dagnn.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
OCD cosmetics.
[dagnn.git]
/
README.md
diff --git
a/README.md
b/README.md
index
f370b71
..
fa77a7e
100644
(file)
--- a/
README.md
+++ b/
README.md
@@
-1,15
+1,14
@@
+# Introduction #
-#Introduction#
+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)
-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##
+## Example ##
A typical use would be:
A typical use would be:
-```
L
ua
+```
l
ua
model = nn.DAG()
a = nn.Linear(100, 10)
model = nn.DAG()
a = nn.Linear(100, 10)
@@
-48,73
+47,75
@@
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.
particularly useful to add anonymous modules which have a single
predecessor and successor.
-##Input and output##
+# Usage #
+
+## 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, 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
+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.
The input to the DAG (respectively the produced output) is a nested
table of inputs reflecting the structure of the nested table of
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
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
+input, since it is the input to the module a, and its output is a
table composed of two tensors, corresponding to the outputs of d and e
respectively.
table composed of two tensors, corresponding to the outputs of d and e
respectively.
-#
Usage
#
+#
# Functions #
#
-##
nn.DAG()
##
+##
# nn.DAG() #
##
Create a new empty DAG, which inherits from nn.Container.
Create a new empty DAG, which inherits from nn.Container.
-##
nn.DAG:connect([module1 [, module2 [, ...]]])
##
+##
# nn.DAG:connect(module1, module2 [, module3, [...]]) #
##
Add new nodes corresponding to the modules passed as arguments if they
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)##
+Accepting more than two arguments allows in particular to add
+anonymous modules, which are not associated to variables. In principle
+the only ones that have to be non-anonymous are those that have more
+than one successor/predecessor and/or are inputs/outputs.
-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:setInput(i) ###
-##nn.DAG:setOutput(o)##
+Define 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) ###
Similar to DAG:setInput().
Similar to DAG:setInput().
-##
nn.DAG:print()
##
+##
# nn.DAG:print() #
##
-Print
s
the list of nodes.
+Print 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
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
+a pdf file
such as [this one](https://fleuret.org/git-extract/dagnn/graph.pdf)
with
```
dot graph.dot -T pdf -o graph.pdf
```
```
dot graph.dot -T pdf -o graph.pdf
```
-##nn.DAG:updateOutput(input)##
-
-See the torch documentation.
-
-##nn.DAG:updateGradInput(input, gradOutput)##
-
-See the torch documentation.
-
-##nn.DAG:accGradParameters(input, gradOutput, scale)##
-
-See the torch documentation.
+### nn.DAG:setLabel(module, name) ###
---
-*Francois Fleuret, Jan 13th, 2017*
+Add a label to the given module, that will be used for DAG:print() and DAG:saveDot()