变分自动编码器图示

变分自动编码器图示

我正在使用该neuralnetwork包为我的文本添加神经网络插图。神经网络属于变分自动编码器,如您所知,这种类型的网络的中间层由一些平均值和标准差组成,这些平均值和标准差是我们从由这些参数构成的正态分布中采样的。如何为该层创建插图?如何为层中的每个节点命名不同的名字(mu 和 sigma)?

编辑:这是我已经拥有的乳胶代码:

\begin{center}
\begin{neuralnetwork}[height=5]
    \newcommand{\nodetextclear}[2]{}
    \newcommand{\nodetextx}[2]{$x_#2$}
    \newcommand{\nodetexty}[2]{$y_#2$}
    \inputlayer[count=4, bias=false, title=Input\\layer, text=\nodetextx]
    \hiddenlayer[count=2, bias=false, title=Hidden\\layer, text=\nodetextclear] \linklayers
    \hiddenlayer[count=1, bias=false, title=Latent layer] \linklayers
    \outputlayer[count=4, title=Output\\layer, text=\nodetextx] \linklayers
\end{neuralnetwork}
\end{center}}

这给了我这个: 变分自编码器

但我想要的是这个: 实变分自动编码器

图片版权:走向数据科学

答案1

可能有点晚了,但是这里也有非常相似的东西。代码在这里

瓦埃

% Variational autoencoder architecture. The earliest type of generative machine learning model.

\documentclass[tikz]{standalone}

\usepackage{xstring}

\usetikzlibrary{fit,positioning}

\newcommand\drawNodes[2]{
  % #1 (str): namespace
  % #2 (list[list[str]]): list of labels to print in the node of each neuron
  \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) {\n};
  }
}

\newcommand\denselyConnectNodes[2]{
  % #1 (str): namespace
  % #2 (list[int]): number of nodes in each layer
  \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{document}
\begin{tikzpicture}[
    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{document}

答案2

您的代码存在错误:

\outputlayer[count=4, title=Output\\layer, text=\nodetexty]

您可以在文本中插入您想要的内容(text=$\mu^{#1}$例如)。

相关内容