+function DAG:accGradParameters(input, gradOutput, scale)
+ scale = scale or 1
+
+ assert(self.sorted, 'there has been a DAG structure change before a DAG:accGradParameters')
+
+ for k = 1, #self.modules do
+ local nnm = self.modules[k]
+ local node = self.node[nnm]
+ -- nnm:accGradParameters(node.input, node.gradOutput, scale)
+ self:rethrowErrors(nnm, k, 'accGradParameters', node.input, self:computeGradOutput(node.gradInputSucc), scale)
+ end
+end
+
+----------------------------------------------------------------------
+
+function DAG:dot(filename)
+ local file = (filename and io.open(filename, 'w')) or io.stdout
+
+ file:write('digraph {\n')
+
+ file:write('\n')
+
+ for nnma, node in pairs(self.node) do
+ file:write(
+ ' '
+ .. node.index
+ .. ' [shape=box,label=\"' .. torch.type(nnma) .. '\"]'
+ .. '\n'
+ )
+
+ for _, nnmb in pairs(node.succ) do
+ file:write(
+ ' '
+ .. node.index
+ .. ' -> '
+ .. self.node[nnmb].index
+ .. '\n'
+ )
+ end
+
+ file:write('\n')
+ end
+
+ file:write('}\n')
+
+end