我对如何以正确的方式提升sigmoid结果感到困惑。 例如,我的NN的输入在0,10之间。我把它缩放到-4,4之间作为sigmoid的有效输入范围,我得到的结果是0.83201。 现在我想将它重新缩放到0,10之间。
我认为sigmoid的反转是logit但是当我使用它时会发生有趣的事情:
float u = sig.LogSigmoid(sig.InputScaler(3,0f,10f,-4f,4f));
Debug.Log(-Mathf.Log(u/(1-u)));
结果:1.6。 而
float u = sig.LogSigmoid(sig.InputScaler(4,0f,10f,-4f,4f));
Debug.Log(-Mathf.Log(u/(1-u)));
结果为:0.8。
编辑: 好了一些摆弄后,我发现Logit确实有效,只返回我的缩放输入:-)。 所以对于sigmoid +降尺度:
float u = sig.LogSigmoid(sig.InputScaler(6,0f,10f,-4f,4f));
以下logit + upscaling完美无缺:
Debug.Log(sig.InputScaler(-Mathf.Log((1-u)/u),-4f,4f,0f,10f));
InputScaler是:
public float InputScaler(float x, float minFrom, float maxFrom, float minTo, float maxTo)
{
float t = (((x-minFrom)*(maxTo-minTo))/(maxFrom-minFrom))+minTo;
return t;
}
答案 0 :(得分:1)
要重新缩放sigmoid的输出(在[0,1]范围内)到[0,10],您当然可以使用sig.InputScale(u,0f,1f,0f,10f)
,但当然在这种情况下缩放也很简单为u*10f
。
但是,我不明白为什么你说反sigmoid。如果要重新缩放函数的输出,则永远不需要反函数。
另一方面,如果你试图反转包含输入缩放的sigmoid,那么你需要将logit的输出从[-4,4]缩小到[0,10]:I.e。 sig.InputScale(Mathf.Log(u/(1-u)),-4f,4f,0f,10f)
。