我想绘制softmax 激活函数。我知道已经有一个类似问题但不幸的是,到目前为止,这些评论和答案都无法真正帮助我。这是我当前的代码:
\begin{figure}[t]
\begin{tikzpicture}
\begin{axis}[
ylabel=$\sigma(z)_j$,
xlabel=$z$,
xmin=-5,
xmax=5]
\addplot[blue,domain=-5:5,samples=51]
{exp(x)/sumexp(x,-4,0)};
\end{axis}
\end{tikzpicture}
\caption{Softmax activation function.}
\end{figure}
尝试编译此代码始终会导致以下错误消息:
软件包 PGF 数学错误:未知函数“sumexp”(在“exp(x)/sumexp(x,-4,0)”中)。\end{tikzpicture} }
任何想法都将受到高度赞赏。
//编辑:
添加以下定义后(我愚蠢地忘记之前添加):
\pgfmathdeclarefunction{sumexp}{3}{%
\begingroup%
\pgfkeys{/pgf/fpu,/pgf/fpu/output format=fixed}%
\pgfmathsetmacro{\myx}{#1}%
\pgfmathtruncatemacro{\myxmin}{#2}%
\pgfmathtruncatemacro{\myxmax}{#3}%
\pgfmathsetmacro{\mysum}{0}%
\pgfplotsforeachungrouped\XX in {\myxmin,...,\myxmax}%
{\pgfmathsetmacro{\mysum}{\mysum+exp(\XX)}}%
\pgfmathparse{\mysum+exp(#1)}%
\pgfmathsmuggle\pgfmathresult\endgroup%
}%
我最终收到以下错误消息:
包 PGF 数学错误:抱歉,浮点单位的内部例程接近“-4.00000000000”。(在“exp(x)/sumexp(x,-4,0)”中)。 \end{tikzpicture} }
答案1
这里的(等效)效果/pgf/fpu/output format=fixed
仅限于函数的最后sumexp
。
\documentclass{article}
\usepackage{pgfplots}
\pgfplotsset{compat=1.18}
\makeatletter
\pgfmathdeclarefunction{sumexp}{3}{%
\begingroup%
\pgfkeys{/pgf/fpu}% "/pgf/fpu/output format=fixed" removed
\pgfmathsetmacro{\myx}{#1}%
\pgfmathtruncatemacro{\myxmin}{#2}%
\pgfmathtruncatemacro{\myxmax}{#3}%
\pgfmathsetmacro{\mysum}{0}%
\pgfplotsforeachungrouped\XX in {\myxmin,...,\myxmax}%
{\pgfmathsetmacro{\mysum}{\mysum+exp(\XX)}}%
\pgfmathparse{\mysum+exp(#1)}%
\pgfmathfloattofixed\pgfmathresult% added
\pgfmathsmuggle\pgfmathresult\endgroup%
}%
\makeatother
\begin{document}
\begin{tikzpicture}
\begin{axis}[
ylabel=$\sigma(z)_j$,
xlabel=$z$,
xmin=-5,
xmax=5]
\addplot[blue,domain=-5:5,samples=51]
{exp(x)/sumexp(x,-4,0)};
\end{axis}
\end{tikzpicture}
\end{document}
请帮我检查一下该图是否正确,因为我几乎对 softmax 函数一无所知。
一些不成熟的话语:
这是pgfplots
承诺d2fbb2a
导致错误
!软件包 PGF 数学错误:抱歉,浮点单元的内部例程收到格式错误的浮点数 `-4.0000000000'。不可读部分位于 '' 附近。
似乎与/pgf/fpu=true
,/pgf/fpu/output format=fixed
不兼容\pgfplotsforeachungrouped
,因为后者可能会调用\pgfmathsubtract@
(在\pgfplotsforeachungroupeduniform@
)当 fpu 被激活时,它总是期望浮点格式的输入。
这里我采用了可能最简单的改变:限制 的范围/pgf/fpu/output format=fixed
。从更大的角度来看,或许\pgfplotsforeachungrouped
或\pgfmathsubtract@
应该得到增强。