X-Git-Url: https://www.fleuret.org/cgi-bin/gitweb/gitweb.cgi?p=dagnn.git;a=blobdiff_plain;f=README.md;h=fa77a7e785ccdb23880cacdea55e5d609f294399;hp=869a1d97c09df81fd886168e78159bc56b7f8bdf;hb=HEAD;hpb=91d22819226af01ec2eee6aed49007e058dc6e50 diff --git a/README.md b/README.md index 869a1d9..fa77a7e 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,8 @@ - # Introduction # -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. +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 ## @@ -67,7 +66,7 @@ table of inputs reflecting the structure of the nested table of 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 +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. @@ -77,20 +76,27 @@ respectively. 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 have not been already added in a previous call. Add edges between -every two nodes associated to two successive modules in the arguments. +every two nodes associated to two successive modules in the +arguments. Calling this function with n > 2 arguments is strictly equivalent to calling it n-1 times on the pairs of successive arguments. +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. + ### nn.DAG:setInput(i) ### -Defines the content and structure of the input. The argument should be +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. +should be a (nested) table of inputs, with the corresponding +structure. ### nn.DAG:setOutput(o) ### @@ -98,17 +104,18 @@ Similar to DAG:setInput(). ### nn.DAG:print() ### -Prints the list of nodes. +Print 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 +a pdf file such as [this one](https://fleuret.org/git-extract/dagnn/graph.pdf) with ``` dot graph.dot -T pdf -o graph.pdf ``` --- -*Francois Fleuret, Jan 13th, 2017* +### nn.DAG:setLabel(module, name) ### + +Add a label to the given module, that will be used for DAG:print() and DAG:saveDot()