nn_dropout
\documentclass[border=0.1cm]{standalone}
\usepackage{scalerel}
\usepackage[dvipsnames]{xcolor}
\usepackage{tikz}
\usetikzlibrary{shapes,snakes}
\usetikzlibrary{calc, shapes.geometric,shapes.symbols,fit,positioning,shadows, arrows,automata}
\usepackage{listofitems}
\usetikzlibrary{arrows.meta}
\usepackage[outline]{contour}
\contourlength{1.4pt}
\tikzset{>=latex}
\colorlet{myred}{red!80!black}
\colorlet{myblue}{blue!80!black}
\colorlet{mygreen}{green!60!black}
\colorlet{myorange}{orange!70!red!60!black}
\colorlet{mydarkred}{red!30!black}
\colorlet{mydarkblue}{blue!40!black}
\colorlet{mydarkgreen}{green!30!black}
\tikzstyle{node}=[thick,circle,draw=black,minimum size=22,inner sep=0.5,outer sep=0.6]
\tikzstyle{node drop}=[thick,circle,draw=black,fill=black,minimum size=22,inner sep=0.5,outer sep=0.6]
\tikzstyle{node in}=[node,green!20!black,draw=mygreen!30!black,fill=mygreen!25]
\tikzstyle{node hidden}=[node,blue!20!black,draw=myblue!30!black,fill=myblue!20]
\tikzstyle{node convol}=[node,orange!20!black,draw=myorange!30!black,fill=myorange!20]
\tikzstyle{node out}=[node,red!20!black,draw=myred!30!black,fill=myred!20]
\tikzstyle{connect}=[thick,black]
\tikzstyle{connect arrow}=[-{Latex[length=4,width=3.5]},thick]
\begin{document}
\begin{tikzpicture}[x=2.7cm,y=1.6cm]
\def\NI{4} % n nodes in input layers
\def\NO{4} % n nodes in output layers
\def\NH{5} % n nodes in hidden layer
\def\dropMask{{1,0,0,1,1}}
\def\yshift{0.4} % shift last node for dots
% INPUT LAYER
\foreach \i [evaluate={\c=int(\i==\NI); \y=\NI/2-\i-\c*\yshift; \index=(\i<\NI?int(\i):"n");}]
in {1,...,\NI}
{
\node[node,outer sep=0.6] (NI-\i) at (0,\y) {};
}
% HIDDEN LAYER
\foreach \i [evaluate={\c=int(\i==\NH); \y=\NH/2-\i-\c*\yshift; \index=(\i<\NH?int(\i):"m");}]
in {\NH,...,1}
{
\node[node] (NH-\i) at (1,\y) {};
\foreach \j in {1,...,\NI}
{
\draw[connect arrow] (NI-\j) -- (NH-\i);
}
}
% DROPPOUT LAYER
\foreach \i [evaluate={\c=int(\i==\NH); \y=\NH/2-\i-\c*\yshift;\d=\dropMask[\i-1];}]
in {1,...,\NH}
{
\ifnum\d=1
\node[node drop] (ND-\i) at (1.75,\y) {};
\else
\node[node] (ND-\i) at (1.75,\y) {};
\fi
\draw[connect arrow] (NH-\i) -- (ND-\i);
}
% OUTPUT LAYER
\foreach \i [evaluate={\c=int(\i==\NO); \y=\NO/2-\i-\c*\yshift;}]
in {1,...,\NO}{
\node[node] (NO-\i) at (2.75,\y) {};
\foreach \j [evaluate={\d=\dropMask[\j-1];}] in {1,...,\NH}
{
\ifnum\d=0
\draw[connect arrow] (ND-\j) -- (NO-\i);
\fi
}
}
% BACKGROUND
\node [label=input, fit=(NI-1) (NI-\NI), draw, fill=gray, opacity=0] (inBox) {};
\node [label=hidden, fit=(NH-1) (NH-\NH), draw, fill=gray, opacity=0] (hiddenBox) {};
\node [label=droppout, fit=(ND-1) (ND-\NH), draw, fill=gray, opacity=0.45] (dropBox) {};
\node [label=output, fit=(NO-1) (NO-\NO), draw, fill=gray, opacity=0] (outBox) {};
% DOTS
\path (NI-\NI) --++ (0,1+\yshift) node[midway,scale=1.2] {$\vdots$};
\path (NH-\NH) --++ (0,1+\yshift) node[midway,scale=1.2] {$\vdots$};
\path (ND-\NH) --++ (0,1+\yshift) node[midway,scale=1.2] {$\vdots$};
\path (NO-\NO) --++ (0,1+\yshift) node[midway,scale=1.2] {$\vdots$};
\end{tikzpicture}
\end{document}