figure-lstm02.tex 5.37 KB
Newer Older
曹润柘 committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18



%-----------------------------------------------

    \begin{tikzpicture}
        \setlength{\base}{0.6cm}

        \tikzstyle{wordnode} = [font=\scriptsize]
        \tikzstyle{auxnode} = [inner sep=0pt,outer sep=0pt,opacity=0,draw=red,fill=red,circle,minimum size=3pt]
        \tikzstyle{opnode} = [inner sep=0pt,outer sep=0pt,draw,fill=green!30!white,font=\scriptsize,minimum size=10pt]
        \tikzstyle{standard} = [rounded corners=5pt,thick]
        \tikzstyle{emph} = [rounded corners=5pt,thick,draw=red]
        \tikzstyle{formulanode} = [font=\scriptsize,align=left,draw=red,rectangle,fill=red!10!white,rounded corners=2pt,drop shadow]

        % Skeleton
        \begin{scope}[every label/.append style={label distance=1pt,font=\tiny,inner sep=0pt,opacity=0}]
            \coordinate (aux12) at (0,0);
zengxin committed
19
            %\node[auxnode,label={-45:12}] () at (aux12) {};
曹润柘 committed
20 21

            \coordinate (aux22) at ([yshift=\base]aux12);
zengxin committed
22
            %\node[auxnode,label={-45:22}] () at (aux22) {};
曹润柘 committed
23
            \coordinate (aux21) at ([xshift=-2\base]aux22);
zengxin committed
24
            %\node[auxnode,label={-45:21}] () at (aux21) {};
曹润柘 committed
25
            \coordinate (aux23) at ([xshift=\base]aux22);
zengxin committed
26
            %\node[auxnode,label={-45:23}] () at (aux23) {};
曹润柘 committed
27
            \coordinate (aux24) at ([xshift=\base]aux23);
zengxin committed
28
            %\node[auxnode,label={-45:24}] () at (aux24) {};
曹润柘 committed
29
            \coordinate (aux25) at ([xshift=\base]aux24);
zengxin committed
30
            %\node[auxnode,label={-45:25}] () at (aux25) {};
曹润柘 committed
31
            \coordinate (aux26) at ([xshift=\base]aux25);
zengxin committed
32
            %\node[auxnode,label={-45:26}] () at (aux26) {};
曹润柘 committed
33
            \coordinate (aux27) at ([xshift=\base]aux26);
zengxin committed
34
            %\node[auxnode,label={-45:27}] () at (aux27) {};
曹润柘 committed
35
            \coordinate (aux28) at ([xshift=\base]aux27);
zengxin committed
36
            %\node[auxnode,label={-45:28}] () at (aux28) {};
曹润柘 committed
37
            \coordinate (aux29) at ([xshift=2\base]aux28);
zengxin committed
38
            %\node[auxnode,label={-45:29}] () at (aux29) {};
曹润柘 committed
39 40

            \coordinate (aux33) at ([yshift=\base]aux23);
zengxin committed
41
            %\node[auxnode,label={-45:33}] () at (aux33) {};
曹润柘 committed
42
            \coordinate (aux34) at ([yshift=\base]aux24);
zengxin committed
43
            %\node[auxnode,label={-45:34}] () at (aux34) {};
曹润柘 committed
44
            \coordinate (aux35) at ([yshift=\base]aux25);
zengxin committed
45
            %\node[auxnode,label={-45:35}] () at (aux35) {};
曹润柘 committed
46
            \coordinate (aux37) at ([yshift=\base]aux27);
zengxin committed
47
            %\node[auxnode,label={-45:37}] () at (aux37) {};
曹润柘 committed
48 49

            \coordinate (aux45) at ([yshift=\base]aux35);
zengxin committed
50
            %\node[auxnode,label={-45:45}] () at (aux45) {};
曹润柘 committed
51 52

            \coordinate (aux55) at ([yshift=\base]aux45);
zengxin committed
53
            %\node[auxnode,label={-45:55}] () at (aux55) {};
曹润柘 committed
54 55 56
            \ExtractX{$(aux21)$}
            \ExtractY{$(aux55)$}
            \coordinate (aux51) at (\XCoord,\YCoord);
zengxin committed
57
            %\node[auxnode,label={-45:51}] () at (aux51) {};
曹润柘 committed
58 59 60
            \ExtractX{$(aux23)$}
            \ExtractY{$(aux55)$}
            \coordinate (aux53) at (\XCoord,\YCoord);
zengxin committed
61
            %\node[auxnode,label={-45:53}] () at (aux53) {};
曹润柘 committed
62 63 64
            \ExtractX{$(aux28)$}
            \ExtractY{$(aux55)$}
            \coordinate (aux58) at (\XCoord,\YCoord);
zengxin committed
65
            %\node[auxnode,label={-45:58}] () at (aux58) {};
曹润柘 committed
66 67 68
            \ExtractX{$(aux29)$}
            \ExtractY{$(aux55)$}
            \coordinate (aux59) at (\XCoord,\YCoord);
zengxin committed
69
            %\node[auxnode,label={-45:59}] () at (aux59) {};
曹润柘 committed
70 71

            \coordinate (aux68) at ([yshift=\base]aux58);
zengxin committed
72
            %\node[auxnode,label={-45:68}] () at (aux68) {};
曹润柘 committed
73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96
        \end{scope}

        \begin{scope}
            \node[opnode,circle,opacity=0] (f53) at (aux53) {};
            \node[opnode,circle,opacity=0] (u55) at (aux55) {};
            % forget gate
            {
                \draw[emph] (aux21) -- (aux23) -- (aux33);
                \draw[-latex,emph] (aux12) -- (aux22) -- (aux23) -- (f53);
                \node[opnode,circle,draw=red,thick] () at (aux33) {$\sigma$};
            }
            {
                \draw[standard] (aux21) -- (aux23) -- (aux33);
                \draw[-latex,standard] (aux12) -- (aux22) -- (aux23) -- (f53);
                \node[opnode,circle] () at (aux33) {$\sigma$};
            }
            % input gate
            {
                \node[opnode,circle] (i45) at (aux45) {};
                \draw[-latex,emph] (aux21) -- (aux24) |- (i45);
                \draw[-latex,emph] (aux21) -- (aux25) -- (u55);
                \draw[emph] (aux12) -- (aux22) -- (aux23);
                \node[opnode,circle,draw=red,thick] () at (aux34) {$\sigma$};
                \node[opnode,rectangle,rounded corners=2pt,inner sep=2pt,draw=red,thick] () at (aux35) {$\mathrm{tanh}$};
97
                \node[opnode,circle,draw=red,thick] (i45) at (aux45) {};
曹润柘 committed
98 99 100 101 102 103 104
            }
         \end{scope}

        \begin{scope}
            \node[wordnode,anchor=south] () at ([xshift=0.5\base]aux21) {$\mathbf{h}_{t-1}$};
            \node[wordnode,anchor=west] () at (aux12) {$\mathbf{x}_t$};
            \node[wordnode,anchor=south] () at ([xshift=0.5\base]aux51) {$\mathbf{c}_{t-1}$};
曹润柘 committed
105
           
曹润柘 committed
106
        \end{scope}
曹润柘 committed
107
        
曹润柘 committed
108 109 110
         \node[ ] (o27) at (aux27) { };

        \begin{pgfonlayer}{background}
曹润柘 committed
111
            \node[draw,very thick,rectangle,fill=blue!10!white,rounded corners=5pt,inner sep=4pt,fit=(aux22) (aux58) (u55) (o27)] (LSTM) {};
曹润柘 committed
112
        \end{pgfonlayer}
曹润柘 committed
113
        
114 115 116
        %%new
        \draw[-] (i45.north west) -- (i45.south east);
        \draw[-] (i45.north east) -- (i45.south west);
曹润柘 committed
117

曹润柘 committed
118
    \end{tikzpicture}