Escriba redes neuronales convolucionales usando TikZ

Escriba redes neuronales convolucionales usando TikZ

Me gustaría dibujar una CNN como esta en la imagen usando TikZ, ¿alguna idea?este

Respuesta1

Esto es para darle un comienzo (y no un intento de reproducir completamente la captura de pantalla completa). Esta respuesta viene con un estilo 3d matrixque le permite producir estos bloques de manera bastante conveniente, solo necesita completar las entradas. Asegúrese de darle a cada matriz un nombre diferente; de ​​lo contrario, una matriz puede heredar el tamaño de bloque de otra matriz. (También es necesario ejecutar el código dos veces). También muestro cómo se pueden dibujar flechas entre matrices y elementos específicos.

\documentclass[tikz,border=3mm]{standalone}
\usepackage{eqparbox}
\usetikzlibrary{matrix,positioning,arrows.meta,bending}
\newbox\matrixcellbox
\tikzset{math center align per column/.style={nodes={execute at begin
 node={\setbox\matrixcellbox=\hbox\bgroup$},
 execute at end
 node={$\egroup\eqmakebox[\tikzmatrixname\the\pgfmatrixcurrentcolumn][c]{\copy\matrixcellbox}}}},
 math center align per matrix/.style={nodes={execute at begin
 node={\setbox\matrixcellbox=\hbox\bgroup$},
 execute at end
 node={$\egroup\eqmakebox[\tikzmatrixname][c]{\copy\matrixcellbox}}}},
 3d matrix/.style={matrix of nodes,nodes in empty cells,math center align per
 matrix,nodes={draw,anchor=center,outer sep=0pt,inner sep=1pt,
 text height={height("\raisebox{0.2ex}{A}")},text depth={depth("g")}},
 column sep=-\pgflinewidth,row sep=-\pgflinewidth,execute at end matrix={
 \foreach \XX in {1,...,\the\pgfmatrixcurrentcolumn}
 {\draw (\tikzmatrixname-1-\XX.north east) -- ++ (#1,#1);}
 \ifnum\the\pgfmatrixcurrentrow>1
 \foreach \XX in {1,...,\the\numexpr\the\pgfmatrixcurrentrow-1}
 {\draw (\tikzmatrixname-\XX-\the\pgfmatrixcurrentcolumn.south east) -- ++ (#1,#1);}
 \fi
 \draw (\tikzmatrixname-1-1.north west) -- ++ (#1,#1) -- 
  ([xshift=1ex,yshift=1ex]\tikzmatrixname-1-\the\pgfmatrixcurrentcolumn.north east) --
  ([xshift=1ex,yshift=1ex]\tikzmatrixname-\the\pgfmatrixcurrentrow-\the\pgfmatrixcurrentcolumn.south east)  --
  (\tikzmatrixname-\the\pgfmatrixcurrentrow-\the\pgfmatrixcurrentcolumn.south east); 
 }},3d matrix/.default=1ex,
 Rightarrow/.style={double,double
     distance=#1,>={Implies[bend]},shorten <=0.4ex},Rightarrow/.default=1ex}
\begin{document}
\begin{tikzpicture}[node distance=4em]
 \node[3d matrix] (mat1){ 
    0 & 0 & 1 & 1 & 0 & 0 & -1 & -1 & 0 & 0 \\
 };
 \node[3d matrix,above=of mat1] (mat2){ 
    0 & 0 & 1 & 1 & 0 & 0 & -1 & -1 & 0 & 0\\
    0 & 0 & -1 & -1 & 0 & 0 & 1 & 1 & 0 & 0\\
 };
 \node[3d matrix,above=of mat2] (mat3){ 
    0 & 1 & 0 & -1 & 0 \\
    0 & -1 & 0 & 1 & 0 \\
 };
 \node[3d matrix,above=of mat3] (mat4){ 0 & -4 & 0 \\};
 \node[3d matrix,above=of mat4] (mat5){ 4 & -4 \\};
 \node[3d matrix,above=of mat5] (mat6){ 0.99 & 0.01 \\};
 \draw[-{Latex[bend]}] (mat1.east) to[out=0,in=0] 
  coordinate[near end](aux1) ([xshift=1ex]mat2-1-10.east);
 \path (aux1) node[right,above right,3d matrix]{-1 & 0 & 1\\}; 
 \draw[-{Latex[bend]}] (mat1.east) to[out=0,in=0] ([xshift=1ex]mat2-2-10.east);
 \draw[Rightarrow,->] (mat1) -- coordinate[midway,right=2em] (aux2) (mat2);
 \path (aux2) node[right,3d matrix] (mat1a){1 & 0 & -1 \\};
 \draw[Rightarrow,->] (mat2) -- (mat3);
 \draw[Rightarrow,->] (mat3) -- (mat4)
    coordinate[midway,right=1em] (aux3);
 \path (aux3) node[right,3d matrix] (mat3a){-1 & 0 & 1 \\
        1 & 0 & -1\\};
 \foreach \X in {1,2,3} {\foreach \Y in {1,2}
  {\draw[-latex] (mat4-1-\X) -- (mat5-1-\Y);}}
 \draw[Rightarrow,->] (mat5) -- (mat6);
\end{tikzpicture}
\end{document}

ingrese la descripción de la imagen aquí

Hayalgún problemaal intentar agregar una matriz dentro de la construcción de la ruta. Así que agregué coordenadas a lo largo del camino y las usé para colocar la matriz.

información relacionada