私がしようとしているのは、ニューラルネットワークが関数f(x)= x^2を '学習'することです。私はここにコードのthisソースを基にしています。ニューラルネットワークはC#で手書きされていれば(倍精度を使用して)助けます。ニューラルネットワークは、どのようにして離散関数ではなく連続的に学習することができますか?
アイデアは、真実のネットワークペア(たとえば(1,1)、(2,4)、(3,9))をフィードしてから、リアル。入力は、実数の値を持つ1入力ニューロンと、出力層の出力による出力(1ニューロン)によって与えられます。隠れた層には4つのニューロンがあります。
私の問題は、出力ニューロンの出力が0と1の間であることです(私はシグモイド関数を使用しています)。私はthisソースからニューラルネットワークを学習しました。そこでは離散値を出力していました(手書き画像は0,1 ...または9を表しています)。私がこれを回ったのは、関数tan((pi *(2x - 1))/ 2とその逆関数を使うことでした。それでデータを与えたときにxとそれに逆にマッピング関数をx^2に適用します。
これは、(0,1)の上端の数字に実際の問題があるようです。 0.999999996)は、巨大な実数にマッピングしています(私は倍精度が十分正確だとは思わない)。これは標準的なやり方なのか、それとも良い方法ですか?バイナリベクトル(例えば、4つの入力ニューロン、(0,0,0,1)は1の入力です)もう一つのアイデアは、倍精度よりも正確な小数点以下を使用することでした。
このタスクは、神経ネットワーク本当に適切ではない何か?
倍精度は10進数よりも正確です。 tan関数を使用すると、発見したとおりに無限に近づくため、新しい問題が発生します。通常、tanに限度が設定されているので、数値が一定値を上回る/下回ると、結果は強制的に0または1になります。 – jdweng