2017-10-05 9 views
0

noise_shapeの引数を使用してKeras関数Dropoutに関する質問があります。noise_shapeを使用したKerasドロップアウト

質問1:の意味は何

あなたの入力は、形状(BATCH_SIZE、タイムステップ、機能)を持っているとあなたが=(noise_shapeを使用することができ、ドロップアウトマスクは、すべてのタイムステップのために同じようにしたい場合batch_size、1、features)?と、この引数を追加することの利点は何ですか?

脱落するニューロンの数がタイムステップに沿って同じであることを意味しますか?どのタイムステップでも、n個のニューロンが落ちるでしょうか?

質問2: モデルを作成するときにnoise_shapeに 'batch_size'を含める必要がありますか? - >次の例を参照してください。

(10000,1,100,2) - >(データ数、チャネル数、タイムステップ数、フィーチャ数)の形の多変量時系列データがあるとします。

その後、私は64のバッチサイズでバッチを作成 - 私がドロップアウトしてCNNモデルを作成したい場合は、私はKeras機能APIを使用、>(64、1、100、2)

を層MAX1の出力形状にする必要があるため
inp = Input([1, 100, 2]) 
conv1 = Conv2D(64, kernel_size=(11,2), strides(1,1),data_format='channels_first')(inp) 
max1 = MaxPooling2D((2,1))(conv1) 
max1_shape = max1._keras_shape 
drop1 = Dropout((0.1, noise_shape=[**?**, max1._keras_shape[1], 1, 1])) 

(なし、64、50、1)、及び私はこれに対処すべきであるか疑問

を(BATCH_SIZEに相当する)疑問符になしを割り当てることはできません?私はnoise_shapeとして(64,1,1)を使うべきですか?または、私は 'batch_size'という変数を定義し、それを(batch_size、64、1、1)のようにこの引数に渡す必要がありますか?

答えて

0

質問1:

それは一種の私が思うnumpyの放送のようなものです。

あなたは2つのバッチ魔女3つのタイムステップ及び4つの特徴(それはそれが簡単にそれを表示するために作るために小さな一例です)持って想像:あなたは(2のノイズ形状を使用する場合は (2、3、4)

を、1、4)、各バッチにはすべてのタイムステップに適用される独自のドロップアウトマスクがあります。

array([[[ 1, 2, 3, 4], 
     [ 5, 6, 7, 8], 
     [ 10, 11, 12, 13]], 

     [[ 14, 15, 16, 17], 
     [ 18, 19, 20, 21], 
     [ 22, 23, 24, 25]]]) 

そして、これはランダムnoise_shapeだろう(2、1、4) (1キープと0のようなものです:

だから、(4、2、3)のは、これらの形状の重みであるとしましょう

array([[[ 1, 1, 1, 0]], 

     [[ 1, 0, 0, 1]]]) 

このように2つのノイズシェイプ(すべてのバッチ1つ)があります。 それからタイムステップ軸に沿ってちょっと放送されます。私は正直に言うと、あなたの2番目の質問についてはよく分からない

array([[[ 1, 1, 1, 0], 
     [ 1, 1, 1, 0], 
     [ 1, 1, 1, 0]], 

     [[ 1, 0, 0, 1], 
     [ 1, 0, 0, 1], 
     [ 1, 0, 0, 1]]]) 

と重みに適用される:

array([[[ 1, 2, 3, 0], 
     [ 5, 6, 7, 0], 
     [ 10, 11, 12, 0]], 

     [[ 14, 0, 0, 17], 
     [ 18, 0, 0, 21], 
     [ 22, 0, 0, 25]]]) 

質問2。 はバッチサイズを省略することもできますが、noise_shape の処理方法がわかりません。

編集:あなたは何ができるか このgithub issueに提案されているように、BATCH_SIZEであるべき 、入力の形状の最初の次元を取るです:

import tensorflow as tf 

... 

batch_size = tf.shape(inp)[0] 
drop1 = Dropout((0.1, noise_shape=[batch_size, max1._keras_shape[1], 1, 1])) 

あなたが私を見ることができるようにテンソルフローバックエンドでtheanoにもtheDanoがある場合 にはこれらの問題があります。もしそれが可能であれば、 theanoの形に相当するもので解決できるかもしれません。

関連する問題