battlesnake / neural

LATEX: TikZ package for drawing neural networks. Also available on CTAN at http://www.ctan.org/tex-archive/graphics/pgf/contrib/neuralnetwork
http://www.hackology.co.uk/2013/latex-neural-networks/
GNU General Public License v2.0
241 stars 34 forks source link
directed-graphs graphics illustration latex neural-networks pgf tex tikz visualisation

NOTE CTAN isn't letting me update their copy of the package and I don't have time to waste chasing it.

* The CTAN version is out of date. **

The Github repository has the most up-to-date version.

Title: Neural Network

Author: Mark K Cowan, mark@battlesnake.co.uk

Installation: The most up-to-date version of this package is available as a git repository: battlesnake/neural https://github.com/battlesnake/neural

This package is also available on CTAN as `neuralnetwork`:
    /graphics/pgf/contrib/neuralnetwork
    http://www.ctan.org/tex-archive/graphics/pgf/contrib/neuralnetwork

Description: LaTeX package for drawing graphs, particularly neural network diagrams.

% Diagram is created via the neuralnetwork environment
\begin{neuralnetwork} [nodespacing=10mm, layerspacing=25mm,
        maintitleheight=2.5em, layertitleheight=2.5em,
        height=5, toprow=false, nodesize=17pt, style={},
        title={}, titlestyle={}]
    % nodespacing = vertical spacing between nodes
    % layerspacing = horizontal spacing between layers
    % maintitleheight = space reserved for main title
    % layertitleheight = space reserved for layer titles
    % height = max nodes in any one layer [REQUIRED]
    % toprow = top row in node space reserved for bias nodes
    % nodesize = size of nodes
    % style = style for internal "tikzpicture" environment
    % titlestyle = style for main title

    % To customize the text within nodes, define a macro like:
    \newcommand{\mynodetext}[2] {
        % layer=#1, node=#2
    }
    % The assign it:
    \setdefaultnodetext{\mynodetext}

    % To draw a layer (advanced):
    \layer[title={}, titlestyle={}, count=5,
            nodeclass={hidden neuron}, biaspos=top
            top=false, exclude={}, widetitle=false,
            bias={}]
    % title = layer title
    % titlestyle = style for layer title
    % count = nodes in this layer (excl. bias node)
    % nodeclass = class of node: 
    %       "neuron", which is base class for:
    %       "input neuron"
    %       "output neuron"
    %       "hidden neuron"
    % biaspos = position of bias node:
    %       "top" - immediately above other nodes
    %       "top row" - at the top of the node space, in
    %           the area reserved by setting parameter
    %           "toprow = true" on the "neuralnetwork"
    %           environment
    %       "center" - center of layer
    %       "center left" - left of "center"
    %       "center right" - right of "center"
    %       "center left left" - left of "center left"
    %       "center right right" - right of "center right"
    % top = layer is vertically aligned to the top, not the middle
    % exclude = one-based indices of nodes to avoid drawing
    % widetitle = allocate extra horizontal space for layer title
    % bias = true to add a bias node, false otherwise [REQUIRED]

    % To draw a layer (simpler):
    % "\layer" is wrapped up into some simpler macros, which can
    % accept the same parameters as "\layer"
    \inputlayer[count=16]   % bias=true, nodeclass={input neuron}
    \hiddenlayer[count=12]  % bias=true, nodeclass={hidden neuron}
    \linklayers
    \hiddenlayer[count=12]  % bias=true, nodeclass={hidden neuron}
    \linklayers
    \outputlayer[count=3]   % bias=false, nodeclass={output neuron}
    \linklayers

    % "\linklayers" links every node in the previous layer to the
    % layer before it.

    % To customize the text on the links, define a macro like:
    \newcommand{\mylinktext}[4] {
        % from layer=#1, from node=#2
        % to layer=#3, to node=#4
    }
    % Then assign it:
    \setdefaultlinklabel{\mylinktext}

    % To link the nodes of the previous two layers together:
    \linklayers[title={}, style={}, not from={}, not to={}]
    % title = title to put above the links (i.e. between layers)
    % style = passed to "style" param of "\link"
    % not from = one-based indices of nodes to NOT link from
    % not to = one-based indices of nodes to NOT link to

    % To draw a link from one node to another:
    \link[style={}, labelpos=midway, from layer, from node,
            to layer, to node]
    % style = style for the link path
    % labelpos = TikZ position of the label node along the path:
            "midway", "near end", "very near start",
            "at start", "pos=0.35", etc
    % from layer = layer to link from [REQUIRED]
    % from node = node to link from [REQUIRED]
    % to layer = layer to link to [REQUIRED]
    % to node = node to link to [REQUIRED]

\end{neuralnetwork}