2017-09-26 37 views
0

ドロップアウトのKeras実装について読んでいますが、dropoutと言っても逆ドロップアウトバージョンを使用しているようです。ここでTensorFlowバックエンドでKerasを使用した場合のドロップアウト

は、私がKerasとTensorflowドキュメントを読んだとき、私は理解しているものです:

私はDropout(0.4)を指定すると0.4は、その層内のすべてのノードが0.4であることを意味するドロップさの40%のチャンスがあることを意味しますドロップ確率。したがって、逆方向ドロップアウトの概念によって、残りのニューロンの出力は、保持確率が0.6であるため、1/0.6の係数によってスケーリングされる。

(私の解釈が間違っている場合は指摘してください。私の全体の疑問が、この解釈に基づいています。)

私は0.4の値を指定した場合、それは単に直接意味キープ確率を要求TensorFlowで一方各ノードは60%の確率で削除されます。

私はTensorFlowをKerasのバックエンドで使用しているとどうなりますか?それは維持か落とし確率であるのに0.4かかりますか? Keras層内(すべての必要なライブラリの最新バージョンでのPython 3.6を使用して)

答えて

0

Dropout(0.4)はあなたのニューロンの40%が(保たれていない)をドロップされていることを意味します。 Keras documentationから

ドロップアウトは、ランダム 過学習を防止するのに役立つている、トレーニング期間中に、各更新時 0への入力単位の画分率を設定することからなります。 Dropout層のsource code (Line 72)を見ると

+0

私は明らかにあなたが質問で見ることができるように、あなたが指定したものと全く同じものを指定していることを明確に理解していました。しかし、それは私が求めているものではありません。 TensorFlowはインバースドロップアウトを実装しますが、テンソルフローでドロップアウト(0.4)と言えばノードは60%の確率でドロップされる可能性があります。私の質問:KerasのバックエンドでTensorFlowを使用し、ドロップアウト(0.4)を指定した場合、ノードは40%の確率で落とされるか、40%の確率で保管されますか? –

+0

コメントありがとうございます。私はあなたを正しく理解していると思います。あなたのバックエンドにかかわらず統一されたインターフェイスを提供するために、多くのバックエンドを抽象化するAPIとしてKerasを認識しています。だからほとんどの点で、あなたが使っているバックエンドを問わず、Kerasモデルの違いに気付かないでしょう。しかし、とにかく:あなた自身をチェックする簡単な方法は、ドロップアウトを非常に高く設定することです。たとえば99や1.0です。あなたは、この量のニューロンが落とされる(保持されない)ことが分かります。 – petezurich

0

も答えを決定するのに役立ちます。

ドロップアウトは、ランダム 過学習を防止するのに役立つトレーニング時間中 各更新で0に入力単位の端数「速度」を、設定で構成されています。

ソースもNitish Srivastavaさんらによって書かれた(私は正確kerasがドロップアウトを実装する方法の概要について説明仮定)基準紙found hereを指摘しています。 al。それはKがバックエンドで107

return K.dropout(inputs, self.rate, noise_shape, seed=self.seed) 

線を中心droputのバックエンドの実装を呼び出すよう


もう少しソースを読んだけれども、それが見えます。あなたがまだ好奇心が強い場合は、K.dropoutがあなたのバックエンドでどのように実装されているか調べる価値があるかもしれません。

+0

TensorFlowはインバースドロップアウトを実装していますが、維持率を求めていると言いました。つまり、0.4と指定すると、落とされる確率は60%です。一方、私がkerasで同じものを指定すると、非常にノードが落とされる確率は40%です。もし私がテラスフローをケーラのバックエンドで使用するなら、ドロップアウト(0.4)を指定すると、そのノードの確率は40%か60%に低下するでしょうか? –

+0

"ドロップアウトは、訓練期間中の各更新時に入力単位の割合「割合」を無作為に設定することであり、過適合を防ぐのに役立ちます。 – KDecker

関連する問題