tf.nn.dropout



Tf Nn Dropout



Tf.nn.dropout関数

まず、公式の関数定義を見てください。



def dropout(x, keep_prob, noise_shape=None, seed=None, name=None)

入力は次のとおりです。

  • x、独自のトレーニング、テストデータなど。
  • Keep_prob、ドロップアウト確率
  • ...、他のパラメータは使用されません、導入されません

出力は次のとおりです。



  • xと同じ形状のテンソル

次に、公式APIがこの関数について何を言っているか見てみましょう。

確率keep_probを使用すると、1 / keep_probでスケールアップされた入力要素を出力し、それ以外の場合は0を出力します。スケーリングは、期待される合計が変更されないようにします。

出力のゼロ以外の要素は、元の「1 / keep_prob」回であることに注意してください。そうは言っても、以下のプログラム例を挙げてください。



import tensorflow as tf dropout = tf.placeholder(tf.float32) x = tf.Variable(tf.ones([10, 10])) y = tf.nn.dropout(x, dropout) init = tf.initialize_all_variables() sess = tf.Session() sess.run(init) print sess.run(y, feed_dict = {dropout: 0.4})

操作の結果は次のとおりです。

[[ 0. 0. 2.5 2.5 0. 0. 2.5 2.5 2.5 2.5] [ 0. 2.5 2.5 2.5 2.5 2.5 0. 2.5 0. 2.5] [ 2.5 0. 0. 2.5 0. 0. 2.5 0. 2.5 0. ] [ 0. 2.5 2.5 2.5 2.5 0. 0. 2.5 0. 2.5] [ 0. 0. 0. 0. 0. 0. 0. 0. 2.5 2.5] [ 2.5 2.5 2.5 0. 2.5 0. 0. 2.5 2.5 2.5] [ 0. 2.5 2.5 2.5 0. 2.5 2.5 0. 0. 0. ] [ 0. 2.5 0. 2.5 0. 0. 2.5 2.5 0. 0. ] [ 2.5 2.5 2.5 2.5 2.5 0. 0. 2.5 0. 0. ] [ 2.5 0. 0. 0. 0. 0. 2.5 2.5 0. 2.5]]

操作の結果を分析します。

  • 入力テンソルと出力テンソルの形状はまったく同じです
  • 0でない要素は、元の「1 / keep_prob」時間になります

特性の分析が完了した後、簡単な要約、ドロップアウトの概念はとても良いように見えますが、プログラムでの実装はとても簡単です!率直に言って、テンソルフローのドロップアウトは次のとおりです。 入力テンソルの一部の要素を0にし、0に変更されていない他の要素を元の1 / keep_probサイズにします。