我在用这个 latex 包用来绘制神经网络(自动编码器)。到目前为止,我有以下内容:
\begin{neuralnetwork}[height=4]
\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=3, bias=false, title=Hidden\\layer, text=\nodetextclear] \linklayers
\outputlayer[count=4, title=Output\\layer, text=\nodetextx] \linklayers
\end{neuralnetwork}
我想知道是否有办法使图表通用。我希望它不是转到 $x_4$,而是转到带有三个点的 $x_n$。这个包可以实现吗?
答案1
是的:
从代码中可以看出,还需要做更多工作。要不绘制层中的特定节点,可以使用键exclude
。要不绘制到/来自该排除节点的链接,您可以在选项中使用not to
/ ,但由于软件包中存在错误,目前这需要一个小补丁。not from
\linklayers
为了定位点,我利用每个节点都被命名为的事实Ln-m
,其中n
是层号(从 0 开始计数),m
是节点号。
最后,为了得到n
最后一层的下标,\ifnum
在定义中使用了\nodetextx
,类似于GitHub 存储库中的此示例。
\documentclass[border=5mm]{standalone}
\usepackage{neuralnetwork}
\usepackage{xpatch}
\makeatletter
% \linklayers have \nn@lastnode instead of \lastnode,
% patch it to replace the former with the latter, and similar for thisnode
\xpatchcmd{\linklayers}{\nn@lastnode}{\lastnode}{}{}
\xpatchcmd{\linklayers}{\nn@thisnode}{\thisnode}{}{}
\makeatother
\begin{document}
\begin{neuralnetwork}[height=4]
\newcommand{\nodetextclear}[2]{}
% use \ifnum to get different labels
\newcommand{\nodetextx}[2]{\ifnum #2=4 $x_n$ \else $x_#2$ \fi}
\newcommand{\nodetexty}[2]{$y_#2$}
% use exclude to turn off drawing of specific layers
\inputlayer[count=4, bias=false, exclude={3}, title=Input\\layer, text=\nodetextx]
\hiddenlayer[count=3, bias=false, title=Hidden\\layer, text=\nodetextclear]
\linklayers[not from={3}]
\outputlayer[count=4, exclude={3}, title=Output\\layer, text=\nodetextx]
\linklayers[not to={3}]
% draw dots
\path (L0-2) -- node{$\vdots$} (L0-4);
\path (L2-2) -- node{$\vdots$} (L2-4);
\end{neuralnetwork}
\end{document}