tikzpicture를 사용하여 상당히 일반적인 변형 자동 인코더 만들기

tikzpicture를 사용하여 상당히 일반적인 변형 자동 인코더 만들기

저는 최근 변형 자동 인코더의 네트워크 아키텍처 그림에 문제가 있어서 포럼에 처음 왔습니다. 현재 다음 코드가 있습니다.

\documentclass[tikz]{standalone}

\newcommand\drawNodes[2]{
  \foreach \neurons [count=\lyrIdx] in #2 {
    \StrCount{\neurons}{,}[\arrlength] % uses the xstring package
    \foreach \n [count=\nIdx] in \neurons
      \node[neuron] (#1-\lyrIdx-\nIdx) at (2*\lyrIdx, \arrlength/2-1.4*\nIdx);
  }
}

\newcommand\denselyConnectNodes[2]{
  \foreach \n [count=\lyrIdx, remember=\lyrIdx as \previdx, remember=\n as \prevn] in #2 {
    \foreach \y in {1,...,\n} {
      \ifnum \lyrIdx > 1
        \foreach \x in {1,...,\prevn}
          \draw[->] (#1-\previdx-\x) -- (#1-\lyrIdx-\y);
      \fi
    }
  }
}

\begin{minipage}[t]{0.8\linewidth}
    \hspace*{-0.2\linewidth}
    \rule[-2cm]{0pt}{-10cm}
\begin{tikzpicture}[
    scale=1,
    shorten >=1pt, shorten <=1pt,
    neuron/.style={circle, draw, minimum size=4ex, thick},
    legend/.style={font=\large\bfseries},
  ]

  % encoder
  \drawNodes{encoder}{{{,,,,}, {,,,}, {,,}}}
  \denselyConnectNodes{encoder}{{5, 4, 3}}

  % decoder
  \begin{scope}[xshift=11cm]
    \drawNodes{decoder}{{{,,}, {,,,}, {,,,,}}}
    \denselyConnectNodes{decoder}{{3, 4, 5}}
  \end{scope}

  % mu, sigma, sample nodes
  \foreach \idx  in {1,...,3} {
      \coordinate[neuron, right=2 of encoder-3-2, yshift=\idx cm,, fill=yellow, fill opacity=0.2] (mu\idx);
      \coordinate[neuron, right=2 of encoder-3-2, yshift=-\idx cm, fill=blue, fill opacity=0.1] (sigma\idx);
      \coordinate[neuron, right=4 of encoder-3-2, yshift=\idx cm-2cm, fill=green, fill opacity=0.1] (sample\idx);
    }

  % mu, sigma, sample boxes
  \node [label=$\mu$, fit=(mu1) (mu3), draw, fill=yellow, opacity=0.45] (mu) {};
  \node [label=$\sigma$, fit=(sigma1) (sigma3), draw, fill=blue, opacity=0.3] (sigma) {};
  \node [label=sample, fit=(sample1) (sample3), draw, fill=green, opacity=0.3] (sample) {};

  % mu, sigma, sample connections
  \draw[->] (mu.east) -- (sample.west) (sigma.east) -- (sample.west);
  \foreach \a in {1,2,3}
  \foreach \b in {1,2,3} {
      \draw[->] (encoder-3-\a) -- (mu\b);
      \draw[->] (encoder-3-\a) -- (sigma\b);
      \draw[->] (sample\a) -- (decoder-1-\b);
    }

  % input + output labels
  \foreach \idx in {1,...,5} {
      \node[left=0 of encoder-1-\idx] {$x_\idx$};
      \node[right=0 of decoder-3-\idx] {$\hat x_\idx$};
    }

\end{tikzpicture}
\end{minipage}

이것은 기본적으로 내가 원하는 것을 제공합니다.여기에 이미지 설명을 입력하세요여기에 이미지 설명을 입력하세요 하지만 이 경우에는 치수가 설정되지 않았음을 보여주기 위해 노드 대신 점으로 더 일반화하고 싶었고, 어떻게 생겼으면 좋겠는지 보여주기 위해 그림을 만들려고 했습니다. 이 tikzpicture에서 이것이 가능합니까?

관련 정보