-c = nn.Linear(10, 3)
-d = nn.Linear(10, 3)
-e = nn.CMulTable()
-f = nn.Linear(3, 3)
-g = nn.CAddTable()
-
-----------------------------------------------------------------------
-
-model = nn.DAG()
-
-model:addEdge(a, b)
-model:addEdge(b, c)
-model:addEdge(b, d)
-model:addEdge(c, e)
-model:addEdge(d, e)
-model:addEdge(d, f)
-model:addEdge(e, g)
-model:addEdge(f, g)
-
-model:setInput(a)
-model:setOutput(g)
-
-input = torch.Tensor(3, 10):uniform()
-
-print('******************************************************************')
-print('** updateOutput **************************************************')
-print('******************************************************************')
-
-output = model:updateOutput(input):clone()
-
-printTensorTable(output)
-
-print('******************************************************************')
-print('** updateGradInput ***********************************************')
-print('******************************************************************')
-
-gradInput = model:updateGradInput(input, output)
-
-printTensorTable(gradInput)
-
-print('******************************************************************')
-print('** checkGrad *****************************************************')
-print('******************************************************************')
-
+c = nn.Linear(10, 15)
+d = nn.CMulTable()
+e = nn.Mul(-1)
+
+dag:connect(a, b, c)
+dag:connect(b, nn.Linear(10, 15), nn.ReLU(), d)
+dag:connect(c, d)
+dag:connect(c, e)
+
+dag:setInput(a)
+dag:setOutput({ d, e })
+
+-- Check the output of the dot file
+print('Writing /tmp/graph.dot')
+dag:saveDot('/tmp/graph.dot')
+
+-- Let's make a model where the dag is inside another nn.Container.
+model = nn.Sequential()
+ :add(nn.Linear(50, 50))
+ :add(dag)
+ :add(nn.CAddTable())
+
+local input = torch.Tensor(30, 50):uniform()
+local output = model:updateOutput(input):clone()