我正在尝试绘制 ELU 图。但我不知道公式应该是什么。如果有人能帮忙,我将不胜感激。
这就是我的代码。
\begin{figure}[H]
\centering
\begin{tikzpicture}
\begin{axis}%
[
domain=-3:5,
legend pos=north west,
style={font=\scriptsize,row sep=5cm,/tikz/every odd column/.append style={column sep=0.01cm}
},
]
\addplot%
[
blue,%
mark=none,
samples=100,
domain=-5:5,
]
(x,{(x>=-2)*((exp(x))-1)});
\legend{$
R(z)=\left \{
\begin{tabular}{ccc}
z & z \textgreater 0 \\
\alpha.(e^z–1) & z \leq 0
\end{tabular}
\right \}
$
}
\end{axis}
\end{tikzpicture}
\label{fig:ELU}
\caption{ELU}
\end{figure}
答案1
我对这些东西不太熟悉, https://en.wikipedia.org/wiki/Rectifier_(neural_networks)#ELUsELU 的定义与你展示的图不同。我猜你是在追求
\addplot%
[
blue,%
mark=none,
samples=100,
domain=-3:2,
]
(x,{
(x>=-2) * (exp(x)-1) + % this applies when x is \geq to the threshold value, -2
(x<-2) * (x+(exp(-2)+1) % this applies when x is less
});
其中第二部分中的额外项是函数从两侧接近相同值所需的项。不过,我可能会对其进行一些参数化,方法是定义一个函数并为 -2 创建一个宏,例如像下面的代码一样。
\documentclass[border=5mm]{standalone}
\usepackage{pgfplots}
\usepackage{amsmath}
\begin{document}
\begin{tikzpicture}[
declare function={ % define a function for the ELU
a = 1;
ELU(\x)={a * (exp(\x) - 1)};
}
]
% a macro for the value where the function changes
\newcommand\ELUThreshold{0}
\begin{axis}%
[
legend pos=north west,
style={font=\scriptsize,
row sep=5cm,
/tikz/every odd column/.append style={column sep=0.01cm}
},
]
\addplot%
[
blue,%
mark=none,
samples=100,
domain=-3:2,
]
(x,{
(x>=\ELUThreshold) * (ELU(x)) + % this applies when x is \geq to the threshold value
(x<\ELUThreshold) * (x+(ELU(\ELUThreshold)-\ELUThreshold) % this applies when x is less
});
% some fine tuning of the legend entry
\addlegendentry[minimum height=4ex,text depth=1.5ex]{$R(z)=
\begin{cases}
z & z < \ELUThreshold \\
\alpha (e^z–1) & z \geq \ELUThreshold
\end{cases}
$
}
\end{axis}
\end{tikzpicture}
\end{document}
答案2
我遇到了同样的问题,只是对该函数使用了两个图。
\begin{tikzpicture}
\begin{axis}[
xmin=-2,
xmax=2,
ymin=-2.1,
ymax=2.1,
grid=major,
xlabel={$v$},
ylabel={$f(v)$},
legend entries={ReLU,ELU},
legend pos=south east
]
\addplot[red] coordinates {(-2,0)(0,0)(2,2)};
% Draws the exp part
\addplot[blue, domain=-2:0, samples=100] {(exp(x)-1)};
% Draws the linear part
\addplot[blue, domain=0:2] {x};
\end{axis}
\end{tikzpicture}
答案3
我稍微修改了一下它,这更符合我的需要。但它是基于 Torbjørn T 的推荐。
\begin{figure}[H]
\centering
\begin{tikzpicture}
\begin{axis}%
[
legend pos=north west,
style={font=\scriptsize,
row sep=5cm,
/tikz/every odd column/.append style={column sep=0.01cm}
},
]
\addplot%
[
blue,%
mark=none,
samples=100,
domain=-4:4,
]
(x,{
(x<=0) * (exp(x)-1) +
(x>0) * x
});
\addlegendentry[minimum height=4ex,text depth=1.5ex]{$R(z)=
\begin{cases}
z & z > \ELUThreshold \\
\alpha (e^z–1) & z \leq \ELUThreshold
\end{cases}
$
}
\end{axis}
\end{tikzpicture}
\label{fig:ELU}
\caption{ELU}
\end{figure}