回饋圖

回饋圖

我想創建一個類似的回饋圖在此輸入影像描述

我設法得到以下資訊:

\documentclass{article}
\usepackage[latin1]{inputenc}
\usepackage{tikz}
\usetikzlibrary{shapes,arrows}
\usetikzlibrary{arrows,calc,positioning}

%%%<
\usepackage{verbatim}
\usepackage[active,tightpage]{preview}
\PreviewEnvironment{tikzpicture}
\setlength\PreviewBorder{5pt}%
%%%>
\begin{document}
\pagestyle{empty}
\tikzset{
        block/.style = {draw, rectangle,
            minimum height=1cm,
            minimum width=2cm},
        input/.style = {coordinate,node distance=1cm},
        output/.style = {coordinate,node distance=4cm},
        arrow/.style={draw, -latex,node distance=2cm},
        pinstyle/.style = {pin edge={latex-, black,node distance=2cm}},
        sum/.style = {draw, circle, node distance=1cm},
    }
    \tikzstyle{line} = [draw, -latex']
    \begin{tikzpicture}[auto, node distance=1cm,>=latex']
            \node [input, name=input] {};
            \node [block, below=of input] (nn) {Neural Network};
            \node [block, below=of nn] (error) {Cost of the error};
            \node [input, right=of error, name=out] {};
            \node [block, below=of error] (opt) {Optimiser};
            \draw [draw,->] (input) -- node {Input} (nn);
            \draw [draw,->] (out) -- node[xshift=1.75cm, yshift=0.3cm] {Actual output} (error) ;
            \draw [->] (nn) -- node {Calculated output} (error);
            \draw [->] (error) -- (opt);
    \end{tikzpicture}    
\end{document}

結果是:

在此輸入影像描述

但正如您所看到的,左側部分仍然缺失,我無法以這種方式創建帶有文字的箭頭。我該怎麼做?

答案1

看來您是 TikZ 新手。我建議使用簡單的方法來繪製。一個簡單的圖形應該用簡單的方法畫出來。

在此輸入影像描述

\documentclass[tikz,border=5mm]{standalone}
\begin{document}
\tikzset{block/.style={
        text=white,
        fill=red!70!black,
        minimum height=1cm,
        minimum width=3cm}}
\begin{tikzpicture}[thick,red!70!black]
\path
(0,0)       node[block] (N) {Neural Network}
++(-90:2.5) node[block] (C) {Cost of the error}
+(-90:2)    node[block] (O) {Optimizer};

\draw[<-] (N.north)--+(90:.5) node[above,black] {Input};
\draw[->] (N)--(C) node[midway,right,black] {Calculated output};
\draw[<-] (C.east)--+(0:.5) node[right,black] {Actual output};
\draw[->] (C)--(O);
\draw[<-] (N)--++(180:3) coordinate (A)--++(-90:5.5) coordinate (B)-|(O);
\path (A)--(B) node[midway,left,align=left,black] {New weights\\and constants};
\end{tikzpicture}    
\end{document}

更新1。您可以透過將其>=stealth作為 tikzpicture 的選項來變更箭頭。 Zarko的答案中的箭頭似乎是最好看的^^

\usetikzlibrary{arrows.meta}
\begin{tikzpicture}[thick,red!70!black,>={Straight Barb[angle=60:3pt 2]}]

在此輸入影像描述

更新2。如果人們不記得庫中的選項arrows.meta,那麼使用者定義的箭頭也很方便。這裡我設計了一個箭頭,名為迷因,顏色為青色,使用pic.我認為這個選項[sloped, pos]非常適合此目的。

在此輸入影像描述

\documentclass[tikz,border=5mm]{standalone}
\begin{document}
\tikzset{
block/.style={text=white,
    fill=brown,
    minimum height=1cm,
    minimum width=3cm},
meme/.pic={% my favourite arrow
    \draw[teal] (150:6pt)--(0,0)--(-150:6pt);}
}
\begin{tikzpicture}[thick,brown]
\path
(0,0)       node[block] (N) {Neural Network}
++(-90:2.5) node[block] (C) {Cost of the error}
+(-90:2)    node[block] (O) {Optimizer};

\draw ([yshift=.5mm]N.north)--+(90:.5) pic[pos=0,sloped,xscale=-1]{meme}
node[above,black] {Input};
\draw (N)--(C) pic[pos=1,sloped]{meme} 
node[midway,right,black]{Calculated output};
\draw ([xshift=.5mm]C.east)--+(0:.5) pic[pos=0,sloped,xscale=-1]{meme}
node[right,black]{Actual output};
\draw (C)--(O) pic[pos=1,sloped]{meme};
\draw (N)--++(180:3) coordinate (A) pic[pos=0,sloped]{meme}
--++(-90:5.5) coordinate (B)-|(O);
\path (A)--(B) node[midway,left,align=left,black] {New weights\\and constants};
\end{tikzpicture}    
\end{document}

答案2

\documentclass{article}
\usepackage[latin1]{inputenc}
\usepackage{tikz}
\usetikzlibrary{arrows,positioning}

%%%<
\usepackage{verbatim}
\usepackage[active,tightpage]{preview}
\PreviewEnvironment{tikzpicture}
\setlength\PreviewBorder{5pt}%
%%%>
\begin{document}
\pagestyle{empty}
\tikzset{
        block/.style = {draw, rectangle,
            minimum height=1cm,
            minimum width=2cm},
        input/.style = {coordinate,node distance=1cm},
        output/.style = {coordinate,node distance=4cm},
        line/.style={draw, -latex'}}
    \begin{tikzpicture}[auto, node distance=1cm,>=latex']
            \node [input, name=input] {};
            \node [block, below=of input] (nn) {Neural Network};
            \node [block, below=of nn] (error) {Cost of the error};
            \node [input, right=of error, name=out] {};
            \node [block, below=of error] (opt) {Optimiser};
            \begin{scope}[line]
            \draw (input) -- node {Input} (nn);
            \draw (out) -- node[xshift=1.75cm, yshift=0.3cm] {Actual output} (error) ;
            \draw (nn) -- node {Calculated output} (error);
            \draw (error) -- (opt);
            \draw (opt.south) |- ++ (-6em,-1em) |- (nn)
            node[pos=0.25,left,align=left]{New weights\\ and constants};
            \end{scope}
    \end{tikzpicture}    
\end{document}

在此輸入影像描述

答案3

我盡可能少地更改了您的程式碼,如下所示:

1)為了獲得與範例相同的顏色,我使用了 Stefan Trost 的免費移液器工具:使用 xcolor 套件我定義了相同的顏色:

\usepackage{xcolor}
 \definecolor{myred}{RGB}{149, 55, 53}

2)塊的最小寬度為3 cm

block/.style = {draw, rectangle,fill=myred,text=white,
            minimum height=1cm,
            minimum width=3cm}

3)要繪製一個指向該區塊的箭頭(error),我首先將 a 放置node在其右側,然後使用以下edge語法放置一個箭頭

\node[right=of error]{Actual output}edge[->](error);

4)對於環繞的箭頭,我放置了一個輔助node (aux)

 % auxiliary node (aux)
            \node [coordinate,below left=4mm and 10 mm of opt](aux){};

並使用語法|-and-|來繪製方形線。我將文字放在position 0.25

\draw [->](opt)|-(aux)|-node[pos=.25,align=left]{New weigths \\and constant}(nn);

螢幕截圖

\documentclass{article}
\usepackage[latin1]{inputenc}
\usepackage{tikz}
\usetikzlibrary{shapes,arrows}
\usetikzlibrary{arrows,calc,positioning}

%%%<
\usepackage{verbatim}
\usepackage[active,tightpage]{preview}
\PreviewEnvironment{tikzpicture}
\setlength\PreviewBorder{5pt}%
%%%>
\usepackage{xcolor}
\definecolor{myred}{RGB}{149, 55, 53}
\begin{document}
\pagestyle{empty}
\tikzset{
        block/.style = {draw, rectangle,fill=red,text=white,
            minimum height=1cm,
            minimum width=3cm},
        input/.style = {coordinate,node distance=1cm},
        output/.style = {coordinate,node distance=4cm},
        arrow/.style={draw, -latex,node distance=2cm},
        pinstyle/.style = {pin edge={latex-, black,node distance=2cm}},
        sum/.style = {draw, circle, node distance=1cm},
    }
    \tikzstyle{line} = [draw, -latex']
    \begin{tikzpicture}[auto, node distance=1cm,>=latex']
            \node [input, name=input] {};
            \node [block, below=of input] (nn) {Neural Network};
            \node [block, below=of nn] (error) {Cost of the error};
            \node[right=of error]{Actual output}edge[->](error);
            %\node [ right=of error, name=out] {};
            \node [block, below=of error] (opt) {Optimiser};
            % auxiliary node (aux)
            \node [coordinate,below left=4mm and 10 mm of opt](aux){};
            \draw [draw,->] (input) -- node {Input} (nn);
            %\draw [draw,->] (out) -- node[xshift=1.75cm, yshift=0.3cm] {Actual output} (error) ;
            \draw [->] (nn) -- node {Calculated output} (error);
            \draw [->] (error) -- (opt);
            \draw [->](opt)|-(aux)|-node[pos=.25,align=left]{New weigths \\and constant}(nn);
    \end{tikzpicture}    
\end{document}

答案4

再舉一個例子:

\documentclass{article}
%\usepackage[latin1]{inputenc}
\usepackage{tikz}
\usetikzlibrary{arrows.meta,
                calc, chains,
                positioning,
                quotes}

\usepackage[active,tightpage]{preview}
\PreviewEnvironment{tikzpicture}
\setlength\PreviewBorder{5pt}%

\begin{document}
\tikzset{
node distance = 8mm and 4mm,
 start chain = going below,
block/.style = {fill=orange!70!black, text=white,
                minimum height=8mm, minimum width=32mm,
                on chain},
arrow/.style = {draw=orange!70!black, -{Straight Barb[angle=60:3pt 2]}, thick},
every pin edge/.style = {arrow}
    }

\begin{tikzpicture}
    \node (in)                      {Input};
    \node [block, below=of in] (nn) {Neural Network};
    \node [block,
           pin=right:Actual output
           ] (error)                {Cost of the error};
    \node [block] (opt) {Optimiser};
\coordinate[below=4mm of opt] (out);
%
\draw[arrow]    (in)    edge    (nn)
                (nn)    edge["Calculated output"]  (error)
                (error) edge    (opt)
                (opt.south) -- (out) -|
                ([xshift=-5mm] nn.west) node[pos=0.75,left,align=left] {New Weights\\ and constants}
                        -- (nn);
\end{tikzpicture}
\end{document}

在此輸入影像描述

相關內容