
\begin{frame}
  \frametitle{Neural Network}
  \centering
\newcommand{\inputnum}{4}

% Hidden layer neurons'number
\newcommand{\hiddennumA}{5}
\newcommand{\hiddennumB}{6}

% Output layer neurons'number
\newcommand{\outputnum}{4}

\begin{tikzpicture}


% Input Layer
\foreach \i in {1,...,\inputnum}
{
	\node[circle,
		minimum size = 6mm,
		fill=blue!30] (Input-\i) at (0,-\i) {};
}

% Hidden Layer1
\foreach \i in {1,...,\hiddennumA}
{
	\node[circle,
		minimum size = 6mm,
		fill=red!50,
		yshift=(\hiddennumA-\inputnum)*5 mm
	] (Hidden1-\i) at (2.5,-\i) {};
}

% Hidden Layer2
\foreach \i in {1,...,\hiddennumB}
{
	\node[circle,
		minimum size = 6mm,
		fill=red!50,
		yshift=(\hiddennumB-\inputnum)*5 mm
	] (Hidden2-\i) at (5,-\i) {};
}

% Output Layer
\foreach \i in {1,...,\outputnum}
{
	\node[circle,
		minimum size = 6mm,
		fill=green!50,
		yshift=(\outputnum-\inputnum)*5 mm
	] (Output-\i) at (7.5,-\i) {};
}

% Connect neurons In-Hidden
\foreach \i in {1,...,\inputnum}
{
	\foreach \j in {1,...,\hiddennumA}
	{
		\draw[->, shorten >=1pt] (Input-\i) -- (Hidden1-\j);
	}
}

% Connect neurons In-Hidden
\foreach \i in {1,...,\hiddennumA}
{
	\foreach \j in {1,...,\hiddennumB}
	{
		\draw[->, shorten >=1pt] (Hidden1-\i) -- (Hidden2-\j);
	}
}

% Connect neurons Hidden-Out
\foreach \i in {1,...,\hiddennumB}
{
	\foreach \j in {1,...,\outputnum}
	{
		\draw[->, shorten >=1pt] (Hidden2-\i) -- (Output-\j);
	}
}

% Inputs
\foreach \i in {1,...,\inputnum}
{
	\draw[<-, shorten <=1pt] (Input-\i) -- ++(-1,0)
		node[left]{\LARGE{$x_{\i}$}};
}

% Outputs
\foreach \i in {1,...,\outputnum}
{
	\draw[->, shorten <=1pt] (Output-\i) -- ++(1,0)
		node[right]{\LARGE{$y_{\i}$}};
}

\end{tikzpicture}
\end{frame}
