
아래 MSE에서는 소프트맥스 활성화 함수를 그리는 데 도움이 되는 logsumexp
함수 를 정의합니다.[declare function={logsumexp(\x)=\log(\sum{\exp^{\x_i}});}]
함수를 사용했을 때 \addplot[blue,smooth] {exp(x) /logsumexp(x))};
엉망인 모든 것을 플롯에 추가했습니다.
MSE: ( \addplot
소프트맥스 기능에 대해 주석 처리된 행)
\documentclass[11pt]{article}
\usepackage{subfigure}
\usepackage{pgfplots}
\usepackage[top=3cm,left=3cm,right=3cm,bottom=3cm]{geometry}
% Scriptsize axis style.
\pgfplotsset{every axis/.append style={tick label style={/pgf/number format/fixed},font=\scriptsize,ylabel near ticks,xlabel near ticks,grid=major}}
\pgfplotsset{compat=1.16}
\begin{document}
\begin{figure}[t!]
\centering
\subfigure[sigmoid activation function.]{
\begin{tikzpicture}[declare function={sigma(\x)=1/(1+exp(-\x));}]
\begin{axis}[width=5.5cm,height=6cm,ylabel=$\sigma(z)$,xlabel=$z$,ymin=0,ymax=1.25,xmin=-5,xmax=5]
\addplot[blue,smooth] {1/(1+exp(-x))};
\end{axis}
\end{tikzpicture}
}
\subfigure[Softmax activation function. ]{
\begin{tikzpicture}[declare function={logsumexp(\x)=\log(\sum{\exp^{\x_i}});}]
\begin{axis}[width=5.5cm,height=6cm,ylabel=$ \sigma(z)_j$,xlabel=$z$,ymin=-1.25,ymax=1.25,xmin=-5,xmax=5]
%\addplot[blue,smooth] {exp(x) /logsumexp(x))};
\end{axis}
\end{tikzpicture}
}
\caption[Activation functions.]{Sigmoid and Softmax activation functions}
\label{fig:sigmoid-tanh}
\end{figure}
logsumexp function: $logsumexp(x)=\log(\sum{\exp^{x_i}})$
\end{document}
\addplot에 주석을 달지 않으면 모든 것이 엉망이 됩니다. 내가 무엇을 놓치고 있나요?
Check that your $'s match around math expressions. If they do, then you've probably used a symbol in normal text that needs to be in math mode. Symbols such as subscripts ( _ ), integrals ( \int ), Greek letters ( \alpha, \beta, \delta ), and modifiers (\vec{x}, \tilde{x} ) must be written in math mode. See the full list here.If you intended to use mathematics mode, then use $ … $ for 'inline math mode', $$ … $$ for 'display math mode' or alternatively \begin{math} … \end{math}.
편집하다
에 대한 몇 가지 값이 포함된 예를 제공합니다 x
.
import numpy as np
x = [1.2, 2.5, 3.1, 4.4, 1.6, 2.4, 3.6]
np.exp(x) / np.sum(np.exp(x))
array([0.01933382, 0.07094152, 0.12926387, 0.47430749, 0.02884267,
0.06419054, 0.21312009])
답변1
귀하의 질문에 대해서는 의견에서 언급했듯이 다음 \exp
과 \log
같은 명령이 있습니다.조판하다exp
이러한 함수를 사용하려면 아마도 내장된 함수를 대신 사용하고 싶을 것입니다 ln
. 마찬가지로 \sum
합계 기호를 조판하는 명령이지만 앞의 경우와는 달리 내장된 함수는 없습니다. 그래서 그것을 구축해야합니다. 다음은 예시입니다. (만약 그것이 당신이 원하는 정확한 함수가 아니라면, 일반적인 용어로 함수를 정의하는 정확한 설명을 제공하고 싶을 것입니다. 즉, 일부 Python 코드가 아닌 수학적 언어를 사용하는 것입니다.)
\documentclass[11pt]{article}
\usepackage[top=3cm,left=3cm,right=3cm,bottom=3cm]{geometry}
\usepackage{amsmath}
\DeclareMathOperator{\logsumexp}{logsumexp}
\usepackage{subcaption}
\usepackage{pgfplots}
\pgfplotsset{compat=1.16}
\pgfplotsset{every axis/.append style={tick label style={/pgf/number format/fixed},font=\scriptsize,ylabel near ticks,xlabel near ticks,grid=major}}
\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%
}%
\begin{document}
\begin{figure}[t!]
\centering
\begin{subfigure}[t]{0.45\textwidth}
\begin{tikzpicture}[declare function={sigma(\x)=1/(1+exp(-\x));}]
\begin{axis}[width=5.5cm,height=6cm,ylabel=$\sigma(z)$,xlabel=$z$,ymin=0,ymax=1.25,xmin=-5,xmax=5]
\addplot[blue,smooth] {1/(1+exp(-x))};
\end{axis}
\end{tikzpicture}
\caption{Sigmoid activation function.}
\end{subfigure}
\begin{subfigure}[t]{0.45\textwidth}
\begin{tikzpicture}
\begin{axis}[width=5.5cm,height=6cm,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{subfigure}
\caption[Activation functions.]{Sigmoid and Softmax activation functions}
\label{fig:sigmoid-tanh}
\end{figure}
\end{document}
답변2
%for Softmax function, place this command before \begin{document}.
\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%
}%
위의 sumexp를 정의한 후 sumexp 명령을 사용하여 Softmax 활성화 기능을 그릴 수 있습니다.
\begin{figure}
\centering
\begin{tikzpicture}[declare function=
{Softmax(\x)=exp(x)/sumexp(x,-5,0);}]
\begin{axis}%
[
xlabel = $x$,
ylabel = $y$,
%grid=major,
xmin=-5,
xmax=5,
axis x line=middle,
ymax=1, samples=100,
axis y line=middle,
domain=-5:5}
]
\addplot[blue] {Softmax(x)};
\end{axis}
\end{tikzpicture}
\caption{Softmax Function}
\label{fig:softmax_function}
\end{figure}
다음과 같은 결과가 출력됩니다.
이미지가 완벽하게 적합하지 않을 수도 있지만 그리드, 색상 등을 원하는 대로 선택할 수 있다는 것을 알고 있습니다. 이게 도움이 되길 바란다.