2

I want to use this drawing of a neural network and extend it to a recurrent neural network. To do so I'd like to arrange the hidden nodes to a ring and connect every hidden node with the other hidden nodes. This is a simple feed forward network I got from here. Could someone show me how I can accomplish what I need?

\documentclass{article}

\usepackage{tikz}
\begin{document}
\pagestyle{empty}

\def\layersep{2.5cm}

\begin{tikzpicture}[shorten >=1pt,->,draw=black!50, node distance=\layersep]
    \tikzstyle{every pin edge}=[<-,shorten <=1pt]
    \tikzstyle{neuron}=[circle,fill=black!25,minimum size=17pt,inner sep=0pt]
    \tikzstyle{input neuron}=[neuron, fill=green!50];
    \tikzstyle{output neuron}=[neuron, fill=red!50];
    \tikzstyle{hidden neuron}=[neuron, fill=blue!50];
    \tikzstyle{annot} = [text width=4em, text centered]

    % Draw the input layer nodes
    \foreach \name / \y in {1,...,4}
    % This is the same as writing \foreach \name / \y in {1/1,2/2,3/3,4/4}
        \node[input neuron, pin=left:Input \#\y] (I-\name) at (0,-\y) {};

    % Draw the hidden layer nodes
    \foreach \name / \y in {1,...,5}
        \path[yshift=0.5cm]
            node[hidden neuron] (H-\name) at (\layersep,-\y cm) {};

    % Draw the output layer node
    \node[output neuron,pin={[pin edge={->}]right:Output}, right of=H-3] (O) {};

    % Connect every node in the input layer with every node in the
    % hidden layer.
    \foreach \source in {1,...,4}
        \foreach \dest in {1,...,5}
            \path (I-\source) edge (H-\dest);

    % Connect every node in the hidden layer with the output layer
    \foreach \source in {1,...,5}
        \path (H-\source) edge (O);

    % Annotate the layers
    \node[annot,above of=H-1, node distance=1cm] (hl) {Hidden layer};
    \node[annot,left of=hl] {Input layer};
    \node[annot,right of=hl] {Output layer};
\end{tikzpicture}
% End of code
\end{document}

enter image description here

Best regards.

3

It is somehow unclear what you are asking. Do you want to have multiple hidden layers? Then how about output layer connections. I did something based on my understanding of your question. Please comment if it is not exactly what you want. My answer is based on your own code and this example.

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary[topaths]

\newcount\mycount
\begin{document}
\begin{tikzpicture}[transform shape]
    \tikzstyle{every pin edge}=[<-,shorten <=1pt]
    \tikzstyle{neuron}=[circle,fill=black!25,minimum size=17pt,inner sep=0pt]
    \tikzstyle{input neuron}=[neuron, fill=green!50];
    \tikzstyle{output neuron}=[neuron, fill=red!50];
    \tikzstyle{hidden neuron}=[neuron, fill=blue!50];
    \tikzstyle{annot} = [text width=4em, text centered]

    % input layer
    \foreach \name / \y in {1,...,4}
        \node[input neuron, pin=left:Input \#\y] (I-\name) at (0,-\y) {};

    % hidden layer nodes
    \foreach \number in {1,...,6}{
        \mycount=\number
        \advance\mycount by -1
        \multiply\mycount by 60
        \advance\mycount by 0
        \node[xshift=5cm, yshift=-2.5cm, hidden neuron] (N-\number) at (\the\mycount:3cm) {};
    }

    % hidden layer interconnections
    \foreach \number in {1,...,5}{
        \mycount=\number
        \advance\mycount by 1
        \foreach \numbera in {\the\mycount,...,6}{
            \path (N-\number) edge[<->] (N-\numbera);
        }
    }

    % output layer
    \node[xshift=10cm, yshift=-2.5cm,output neuron,pin={[pin edge={->}]right:Output}] (O) {};

    % input-hidden-output connections
    \foreach \source in {1,...,4}
        \foreach \dest in {3,4,5}
            \path (I-\source) edge[->] (N-\dest);

    \foreach \source in {1,2,6}
        \path (N-\source) edge[->] (O);


\end{tikzpicture}
\end{document}

enter image description here

0

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.