2017-06-04 5 views
2

ニューラルネットワークにドロップアウトを使用してerror estimatesを取得しようとしています。ケラスフォワードパス(ドロップアウト付き)

これは、トレーニング後にネットワークのいくつかのフォワードパスを実行し、ドロップアウトを有効にします。ただし、model.predict()を呼び出すときにドロップアウトがアクティブにならないようです。ケラスでこれを行うことができますか、私は他の場所で私の体重を取らなければなりませんか?

答えて

0

すでにKerasで行われています。プロジェクトのページでthis discussionどのように動作するかについての詳細は、例えばCS231n: Convolutional Neural Networks for Visual Recognition - AFAIKの中で見つけることができます。非常に似た実装がKerasにあります。具体的に:。

(...)極めて重要な、予測機能では、我々はもう を落としていないが、我々は両方の隠れ層出力PPによって のスケーリングを実行していることに注意してくださいこれは、テスト時に重要ですすべてのニューロンは全て の入力を見るので、テスト時のニューロンの出力は、訓練時の期待出力と同じである になります。

+0

エラー推定値を取得するときに、確率的な順方向パスを実行する必要があります。私。毎回異なるドロップアウトマスクを使用して100回の順方向パスを実行します。しかし、予測中にニューロンが落ちていないようだ。 – Aleksk89

+0

確かに、それはコードがここで言うところの通りだ。https://github.com/fchollet/keras/blob/master/keras/layers/core.py#L110 - テスト中/予測段階では、ドロップアウトは使用されません。代わりに、比例重量が適用されます。両方向で明示的な削除をしたい場合は、Lambdaで独自のバージョンを定義できます。 –

0

ケラスのバックエンド機能を使用して、確率的順パス(テスト時にドロップアウトを使用する)を実装できます。あなたが訓練されたニューラルネットワークがmodelと呼ばれていと仮定:完全な実装については

from keras import backend as K 

nb_MC_samples = 100 
MC_output = K.function([model.layers[0].input, K.learning_phase()], [model.layers[-1].output]) 

learning_phase = True # use dropout at test time 
MC_samples = [MC_output([x_test, learning_phase])[0] for _ in xrange(nb_MC_samples)] 
MC_samples = np.array(MC_samples) # [#samples x batch size x #classes] 

には、以下のipython notebookを参照してください。

関連する問題