具有偏置和跳过连接的框图

具有偏置和跳过连接的框图

我正在尝试实现以下框图,该图说明了一些具有偏差和跳过连接的神经网络:

在此处输入图片描述

我的平庸尝试是基于https://tikz.net/skip-connection/

\documentclass[tikz]{standalone}

\usetikzlibrary{positioning, calc, decorations.pathreplacing}

\begin{document}
\begin{tikzpicture}

  \node[fill=yellow!50] (l1) {$(I + \alpha \lambda A^{H}A)^{-1}$};
  \node[fill=teal!50, right=of l1] (l2) {H};
  \node[right=of l2, font=\Large, inner sep=0, ] (add) {$\oplus$};
  \node[blue!50!black, right=of add, label={}] (act2) {$x_{k+1}$};

  \draw[->] (l1) -- (l2);
  \draw[<-] (l1) -- ++(-2,0) node[below, pos=0.8] {$x_k$};
  \draw[->] (l2) -- (act2) node[above, pos=0.8] {};
  \draw[->] ($(l1)-(1.5,0)$) to[out=90, in=90] node[below=1ex, midway, align=center] {} node[above, midway] {$1 - \alpha$} (add);


\end{tikzpicture}
\end{document}

答案1

好吧,光有提示还不够。让我们仔细看看。

顺便说一句,这只是另一个例子,说明抄袭只是方程式的一部分:另一个更重要的部分是学习。所以我强烈建议阅读、尝试和复习pgfmanual 中的教程多次。这里需要的大部分内容已经显示在那里了。

对于创建此类图表的过程,步骤如下:

    1. 将所有必需的节点与一些初始文本放在一起;忽略标签
    1. 建立联系;让它们不完美,例如暂时不要蜿蜒曲折
    1. 介绍并使用你的风格
    1. 引入|--|根据需要;向路径添加更多节点作为标签
    1. 审查并应用小的修正;这里我在输入处放了一个替代方案的演示

结果

关于#1

我决定使用绝对坐标,因为这里可以进行相对定位,但这里并不需要。另请参阅矩阵方法在教程中。

事实证明我不需要任何这些库\usetikzlibrary{positioning, calc, decorations.pathreplacing};,但我把它们留在这里以便在一次编译中比较这两种方法。

#2 的示例

只需专注于连接正确的节点,甚至交叉连接,无需曲折。稍后再处理。因此,从

    \draw[->] (in1) -- (l1);

而不是最后(见章节在此链接之前结束关于 |-)

    \draw[->] (in1) |- (l1);

与其在这里进行争斗,不如观察整体图表的发展(并记下一些(心理)笔记以供以后改进)。

例如 #2 -> #3

基本绝对定位后这行

    \node (l1)  at (2,-1) {$H$};

变成

    \node[blkg] (l1)    at (2,-1) {$H$\\CNN};

因为它的样式blkg现在包含了所需的所有格式(颜色、多行、宽度),同时保持代码整洁:

blkg/.style={fill=green!30!gray!30,align=center,minimum width=15mm},
#4 的示例

好的,这个图已经相当好了,让我们看看需要的标签。有很多种放置标签的方法。这里我选择在路径中插入一个额外的节点,如下所示:

最初只是一个连接箭头

    \draw[->] (in1) -- (add);

现在添加了另一个节点(注意缺少\),放在上面

    \draw[->] (in1) -- node[above] {$1 - \alpha$} (add);

编译后,这对我来说已经足够好了。您可以微调节点沿所述路径以相对单位显示的位置,或者verbally使用pos,请参阅“添加文本”

    \draw[->] (l1) -| node[right, near end] {$\alpha$} (add);
    
    \draw[->] (in2) -- node[right,pos=.3] {$\alpha \times \lambda$} (add);
演示#5

如果你不喜欢

    \draw[->] (in1) |- (l1);

您还可以在路径中引入一个附加点,并像这样蜿蜒曲折:

    \draw[->,red,thick] (in1) -- +(0.6,0) |- (l1.160);

其中奇怪的节点坐标(l1.160)仅告诉了线的锚点位置(想象极坐标)。

代码

\documentclass[10pt,border=3mm,tikz]{standalone}

\usetikzlibrary{positioning, calc, decorations.pathreplacing}
\usetikzlibrary{arrows.meta}% ~~~ only this one needed for "After"

\begin{document}

%After:
 \begin{tikzpicture}[% ~~~ 3. define (and use) your styles ~~~~
    >=Stealth,%     changing the arrow tips
    blkg/.style={fill=green!30!gray!30,align=center,minimum width=15mm},
    blky/.style={fill=yellow!50,align=center,inner sep=2mm},
    add/.style={font=\Large, inner sep=0},
 ]
    % ~~~ 1. blocks ~~~~~~~~~~~~~~~~~~~~~~~~~~~
    \node       (in1)   at (0, 0) {$x_k$};
    \node[blkg] (l1)    at (2,-1) {$H$\\CNN};
    \node[add]  (add)   at (4, 0) {$\oplus$};
    \node       (in2)   at (4, 2) {$A^{H_b}$};
    \node[blky] (l2)    at (6.5, 0) {$(I + \alpha \lambda A^{H}A)^{-1}$\\
                                   DC using CG};
    \node       (out)   at (9, 0) {$x_{k+1}$};
    
    % ~~~ 2. connections ~~~~~~~~~~~~~~
    % ~~~ 4. add some nodes to the paths for the labels ~~~~~~~~~
    \draw[->] (in1) -- node[above] {$1 - \alpha$} (add);
    \draw[->] (add) -- (l2);
    \draw[->] (l2) -- (out);

    \draw[->] (in1) |- (l1);
    \draw[->] (l1) -| node[right, near end] {$\alpha$} (add);
    
    \draw[->] (in2) -- node[right,pos=.3] {$\alpha \times \lambda$} (add);
    
    % ~~~ 5. just to demonstrate it ~~~~
    \draw[->,red,thick] (in1) -- +(0.6,0) |- (l1.160);
 \end{tikzpicture}


%Before:
\begin{tikzpicture}

  \node[fill=yellow!50] (l1) {$(I + \alpha \lambda A^{H}A)^{-1}$};
  \node[fill=teal!50, right=of l1] (l2) {H};
  \node[right=of l2, font=\Large, inner sep=0, ] (add) {$\oplus$};
  \node[blue!50!black, right=of add, label={}] (act2) {$x_{k+1}$};

  \draw[->] (l1) -- (l2);
  \draw[<-] (l1) -- ++(-2,0) node[below, pos=0.8] {$x_k$};
  \draw[->] (l2) -- (act2) node[above, pos=0.8] {};
  \draw[->] ($(l1)-(1.5,0)$) to[out=90, in=90] node[below=1ex, midway, align=center] {} node[above, midway] {$1 - \alpha$} (add);

\end{tikzpicture}
\end{document}

相关内容