这个函数在做什么(softmax)
本文关键字:softmax 什么 函数 | 更新日期: 2023-09-27 18:28:38
这个函数中的"ih"answers"ho"是什么。这是softmax激活函数,我无法理解字符串检查的原因。
public double sim(double x, string layer)
{
// Determine max
double max = double.MinValue;
if (layer == "ih")
max = (ihSum0 > ihSum1) ? ihSum0 : ihSum1;
else if (layer == "ho")
max = (hoSum0 > hoSum1) ? hoSum0 : hoSum1;
// Compute scale
double scale = 0.0;
if (layer == "ih")
scale = Math.Exp(ihSum0 - max) + Math.Exp(ihSum1 - max);
else if (layer == "ho")
scale = Math.Exp(hoSum0 - max ) + Math.Exp(hoSum1 - max);
return Math.Exp(x - max) / scale;
}
这个函数并不难理解。您可能需要花一些时间来了解函数是如何实现神经网络激活函数行为的。
在神经网络中,通常有一个激活函数,它接收一组输入,并根据(输入中的)最大值决定哪个函数会触发该函数。
你的情况也是如此。
似乎有两个输入集(每个"集"称为"层",因此有两个层),代号为"ih"answers"ho"。每个集合还具有两个被称为Sum0
和Sum1
的元素,从而构成四个输入的组合:1.ihSum0
和ihSum1
(用于ih
层)2.hoSum0
和hoSum1
(用于ho
层)
无论ih
、ho
和layer
在您的上下文中是什么意思,您都会更好地理解。但该函数只是检查要使用哪个输入集(或"层")(即"ih"或"ho")来确定两个变量(max
和scale
)。
if (layer == "ih")
max = (ihSum0 > ihSum1) ? ihSum0 : ihSum1;
else if (layer == "ho")
max = (hoSum0 > hoSum1) ? hoSum0 : hoSum1;
最终(与x
一起)将用于确定函数的最终输出。
return Math.Exp(x - max) / scale;