2016-04-03 1 views
1

私は、3つまたは4つの隠れ層と各(隠れ層+非直線性)の組み合わせの間のドロップアウトを持つ単純なフィードフォワードモデルを訓練しています。 時々、いくつかのエポック(約10-11)後、モデルはNLLの誤差としてInfsとNaNの出力を開始し、精度は0.0%に低下します。ドロップアウトを使用しない場合、この問題は発生しません。これはTheanoのドロップアウトに関する既知の問題ですか?ドロップアウトを実装する方法は次のとおりです。ドロップアウトを使用するとTheanoがNaNを投げるのはなぜですか?

def drop(self, input): 
    mask = self.theano_rng.binomial(n=1, p=self.p, size=input.shape, dtype=theano.config.floatX) 
    return input * mask 

ここで、inputはドロップアウトを適用するフィーチャベクタです。 私は、ドロップアウト確率(self.p)が高いほど、NaNの出現が早く起こることも観察しました。 p = 0.5では、エポック1または2の周りにNaNが発生しますが、p = 0.7では、エポック10または11の周りにNaNが発生します。 また、隠れたレイヤーサイズが大きい場合にのみNaNが発生します。たとえば(800,700,700)はNaNを、(500,500,500)はNaNを返します。私の経験、NaNを中

答えて

0

、ネットワークは通常ので、二つの問題で起こる訓練とき:

  • まず、数学的なエラー、例えば負の値のログ。あなたの損失関数でlog()を使用しているときに起こる可能性があります。
  • 第二に、値が大きすぎて、Pythonが処理できない値があります。

あなたのケースでは、あなたの良い所見から、私はそれが第2のケースだと思います。あなたの損失価値は、あまりにも大きくなりすぎて、Pythonで処理できなくなる可能性があります。ネットワークを拡張しようとすると、小さな体重を初期化してみてください。または、異なるアプローチを使用して、Glorot (2010)またはHe (2015)で説明されているような体重を初期化してください。それが役に立てば幸い。

関連する問題