1

シグモイドの結果を正しい方法でアップスケールする方法について混乱しています。たとえば、私の NN の入力は 0 から 10 の間です。これをシグモイドのアクティブな入力範囲として -4,4 の間にスケーリングすると、0.83201 という結果が得られます。今、これを 0,10 の間に再スケーリングしたいと思います。

シグモイドの逆はロジットだと思っていましたが、これを使用すると面白いことが起こります:

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。

編集:いくつかいじった後、わかりましたが、ロジットが機能するのはスケーリングされた入力のみを返すことがわかりました:-)。シグモイド+ダウンスケーリングの場合:

float u = sig.LogSigmoid(sig.InputScaler(6,0f,10f,-4f,4f));

次のロジット+アップスケーリングは完璧に機能しました:

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;
}
4

1 に答える 1

1

シグモイド ([0,1] の範囲) の出力を [0,10] に再スケーリングするには、もちろん一般的に使用できますsig.InputScale(u,0f,1f,0f,10f)が、もちろんこの場合、スケーリングは簡単u*10fです。

しかし、なぜあなたが逆シグモイドについて話すのか理解できません。関数の出力を再スケーリングする場合、逆関数は必要ありません。

一方、代わりに入力スケーリングを含むシグモイドを反転しようとしていた場合は、ロジットの出力を [-4,4] から [0,10] にスケール バックする必要がありますsig.InputScale(Mathf.Log(u/(1-u)),-4f,4f,0f,10f)

于 2015-08-12T11:54:01.087 に答える