1

Sigmoidアクティベーション機能を使用してニューラル ネットワーク タスクを実行しています。私のネットワーク入力は画像(MNISTデータセット)であり、各画像の次元は であるため28*28、それらをベクトルに変換する必要がある場合、N*784行列があります。この大きな行列と重み行列の乗算により、重みに対して大きな正と負の数値が生成され、それらをSigmoid関数に渡す必要があります。私はexpit()シグモイド関数として使用していますが、私の問題は次のとおりです。

30 までの数字は 1 インチに近くなりexpit()ます。たとえば、expit(28)results0.99999999expit(29)results1.0と upper29も取得し1ます。しかし、私の新しいワイトは上30にあり、そのため、学習の最初のサイクルでそれらのいくつかは取得1し、いくつかは0になり、実際にはまったく学習していません.

私がしなければならないこと?Sigmoid's上限は29?私はそれを変更することはできませんか?これを克服するには、画像のサイズを変更する必要がありますか?

4

1 に答える 1

2

コメント セクションで説明したように、本当の問題はそれ自体を使用することであることが判明しましたsigmoid。これは、このような場合には適していません。任意の有限精度計算では、1 つのシステムで 29、別のシステムでは 38 という、説明されている問題に直面します。

問題に対処する 1 つの方法はsoftmax、このような問題の影響を受けにくいアクティベーション機能を使用することです。コスト関数を使用すると、同様の問題に遭遇する可能性があることに注意してください。

少し話題から外れていますが、たとえばtensorflowで問題がどのように解決されるかを確認したい場合があります。初心者向けの素晴らしいチュートリアルがいくつかあります。

于 2016-11-26T15:55:55.237 に答える