TikZ: Diagram of a perceptron

Here is the simple reconstruction. Issues:

  • Left of equations, can easily be added with node.
  • Make inputs and weights with \foreach.
  • Increase the Activation function to be more like the original one.
  • Improve TikZ styles.

Code:

\documentclass[tikz]{standalone}
\usepackage{tikz}
    \usetikzlibrary{positioning}

\tikzset{basic/.style={draw,fill=blue!20,text width=1em,text badly centered}}
\tikzset{input/.style={basic,circle}}
\tikzset{weights/.style={basic,rectangle}}
\tikzset{functions/.style={basic,circle,fill=blue!10}}

\begin{document}
    \begin{tikzpicture}
        \node[functions] (center) {};
        \node[below of=center,font=\scriptsize,text width=4em] {Activation function};
        \draw[thick] (0.5em,0.5em) -- (0,0.5em) -- (0,-0.5em) -- (-0.5em,-0.5em);
        \draw (0em,0.75em) -- (0em,-0.75em);
        \draw (0.75em,0em) -- (-0.75em,0em);
        \node[right of=center] (right) {};
            \path[draw,->] (center) -- (right);
        \node[functions,left=3em of center] (left) {$\sum$};
            \path[draw,->] (left) -- (center);
        \node[weights,left=3em of left] (2) {$w_2$} -- (2) node[input,left of=2] (l2) {$x_2$};
            \path[draw,->] (l2) -- (2);
            \path[draw,->] (2) -- (left);
        \node[below of=2] (dots) {$\vdots$} -- (dots) node[left of=dots] (ldots) {$\vdots$};
        \node[weights,below of=dots] (n) {$w_n$} -- (n) node[input,left of=n] (ln) {$x_n$};
            \path[draw,->] (ln) -- (n);
            \path[draw,->] (n) -- (left);
        \node[weights,above of=2] (1) {$w_1$} -- (1) node[input,left of=1] (l1) {$x_1$};
            \path[draw,->] (l1) -- (1);
            \path[draw,->] (1) -- (left);
        \node[weights,above of=1] (0) {$w_0$} -- (0) node[input,left of=0] (l0) {$1$};
            \path[draw,->] (l0) -- (0);
            \path[draw,->] (0) -- (left);
        \node[below of=ln,font=\scriptsize] {inputs};
        \node[below of=n,font=\scriptsize] {weights};
    \end{tikzpicture}
\end{document}

Picture:

result


With PSTricks but not completed...

enter image description here

\documentclass[preview,border=12pt]{standalone}
\usepackage{pst-node}
\usepackage{amsmath}
\psset
{
    rowsep=4mm,
    colsep=8mm,
    mnodesize=10mm,
    mnode=r,
}
\newcommand{\C}[1]{[mnode=circle,fillstyle=solid,fillcolor=blue!20]$#1$}
\newcommand{\R}[1]{[mnode=r]\psframebox[fillstyle=solid,fillcolor=blue!20]{\parbox{4mm}{\strut\centering$#1$}}}
\def\Symbol{%
\psset{unit=3mm}
\pspicture(-1,-1)(1,1)
    \psset{linewidth=0.4pt}
    \psline(-1,0)(1,0)
    \psline(0,-1)(0,1)
    \psline[linewidth=2\pslinewidth](-0.75,-0.5)(0,-0.5)(0,0.5)(0.75,0.5)
\endpspicture
}
\begin{document}
\offinterlineskip
\begin{psmatrix}
    \C{1}           & \R{w_0}\\
    \C{x_1}         & \R{w_1}\\
    \C{x_2}         & \R{w_2}       & \C{\Sigma}    & [mnode=circle,fillstyle=solid,fillcolor=blue!20,name=symbol]\Symbol   &   [mnode=p]\\
    \vdots          & \vdots\\
    \C{x_n}         & \R{w_n}\\
    \text{inputs}   & \text{weights}
    \psset{arrows=->}
    \ncline{1,1}{1,2}
        \ncline{2,1}{2,2}
            \ncline{3,1}{3,2}
                \ncline{5,1}{5,2}
    \ncdiagg{1,2}{3,3}
        \ncdiagg{2,2}{3,3}
            \ncdiagg{3,2}{3,3}
                \ncdiagg{5,2}{3,3}
    \ncline{3,3}{3,4}
    \ncline{3,4}{3,5}
\end{psmatrix}
\end{document}

Here a shorter code without positioning, so you can scale the picture.

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

\tikzset{basic/.style={draw,fill=blue!50!green!20,
                       text badly centered,minimum width=3em}}
\tikzset{input/.style={basic,circle}}
\tikzset{weights/.style={basic,rectangle,minimum width=2em}}
\tikzset{functions/.style={basic,circle,fill=blue!50!green!20}}
\newcommand{\addsymbol}{\draw[thick] (0.5em,0.5em) -- (0,0.5em) -- 
                        (0,-0.5em) --  (-0.5em,-0.5em)
                        (0em,0.75em) -- (0em,-0.75em)
                        (0.75em,0em) -- (-0.75em,0em);}

\begin{document}
    \begin{tikzpicture}[scale=1.2]
    \foreach \h [count=\hi ] in {$x_n$,$x_2$,$x_1$,$1$}{%
          \node[input] (f\hi) at (0,\hi*2cm-5 cm) {\h};
        }
    \node[functions] (sum) at (4,0) {$\sum$};
    \foreach \h [count=\hi ] in {$w_n$,$w_2$,$w_1$,$w_0$}{%
          \path (f\hi) -- node[weights] (w\hi) {\h} (sum);
          \draw[->] (f\hi) -- (w\hi);
          \draw[->] (w\hi) -- (sum);
        }        
    \node[functions] (step) at (7,0) {};
       \begin{scope}[xshift=7cm,scale=.75]
         \addsymbol
       \end{scope}
    \draw[->] (sum) -- (step);
    \draw[->] (step) -- ++(1,0);
    % Labels
    \node[above=1cm]  at (f4) {inputs};
    \node[above=1cm] at (w4) {weights};
    \end{tikzpicture}
\end{document}

enter image description here