Softmax 激活函数

Softmax 激活函数

我想绘制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@应该得到增强。

相关内容