Erstellen eines relativ allgemeinen Variational Autoencoders mit TikzPicture

Erstellen eines relativ allgemeinen Variational Autoencoders mit TikzPicture

Ich bin neu im Forum, da ich in letzter Zeit Probleme mit einem Bild der Netzwerkarchitektur eines Variational Autoencoders hatte. Derzeit habe ich diesen Code:

\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}

Damit bekomme ich im Grunde, was ich will.Bildbeschreibung hier eingebenBildbeschreibung hier eingeben Ich hätte es jedoch gerne allgemeiner gehalten, mit Punkten statt Knoten, um zu zeigen, dass die Abmessungen in diesem Fall nicht festgelegt sind. Ich habe versucht, eine Zeichnung anzufertigen, um zu zeigen, wie es aussehen soll. Ist dies in diesem Tikz-Bild möglich?

verwandte Informationen