2017-05-02 83 views
11

MaxPooling1DとGlobalMaxPooling1Dは両方とも、時間データの最大プール操作として説明されています。KerasのMaxPooling1DとGlobalMaxPooling1Dの機能の違いは何ですか?

keras.layers.pooling.MaxPooling1D(pool_size=2, strides=None, padding='valid')

私はGlobalMaxPooling1Dは、入力パラメーターを取らないことを理解しています。 keras.layers.pooling.GlobalMaxPooling1D()

私はちょうど彼らが働く方法で2つの違いがどのように視覚的に理解したいですか?

答えて

21

Tdは、LRの時間データのGlobalPooling1Dが ステップ寸法上の最大ベクトルを取ります。したがって、テンソルの形状[10,4,10]は、グローバルプーリング後のテンソル[10,10]の形状になります。 MaxPooling1Dは、各ステップについて最大値をとりますが、各ストライドのpool_sizeに制限されます。だから、pooling_size=2stride=1と[10、4、10]テンソルはMaxPooling(pooling_size=2, stride=1)

長い答えた後、[10、3、10]テンソルであるグラフィック助けを借りて、

は、私たちが3で、簡単な文を考えてみましょう単語のベクトルエンコーディング(word2vec埋め込みなど)があります。もちろん、通常はプールを超えてTensorを埋め込むことはありませんが、これは例のために行うべきです。また、グローバルなプーリングはチャネル全体で機能しますが、この図から除外します。最後に、パディングでは少し複雑になりますが、ここではその必要はありません。

は、我々はそれが各タイムステップが2Dプールにわたって最大であると[1、3,3]テンソルをもたらすmaxPooling1D(pool_size=2, strides=1).そして

the [[.7, -0.2, .1] | pool size is two     
boy [.8, -.3, .2] | so look at two words at a time | stride=1 will 
will [.2, -.1, .4]  and take the max over those  | move the pool down 
live [.4 -.4, .8]] 2 vectors. Here we looking   1 word. Now we look 
          'the' and 'boy'.    'boy' and 'will' and 
                  take the max. 

を有していると仮定する。そして、3つのプールがあるので、タイムスタンプを4から3にダウンサンプリングしました。

しかし、GlobalPooling1Dを使用すると、おそらくその単語のベクトル表現であるその文(Tensor)ライブ'。私は何かを明確にするために実際に

が、ここではGlobalMaxPooling1Dができますkeras

class GlobalMaxPooling1D(_GlobalPooling1D): 
    """Global max pooling operation for temporal data. 
    # Input shape 
     3D tensor with shape: `(batch_size, steps, features)`. 
    # Output shape 
     2D tensor with shape: 
     `(batch_size, channels)` 
    """ 

    def call(self, inputs): 
     return K.max(inputs, axis=1) 

うまくいけば、で定義されているか、お問い合わせください。偉大な説明をだ

import numpy as np 
from keras.models import Sequential 
from keras.layers import Dense, LSTM, MaxGlobalMaxPooling1D 

D = np.random.rand(10, 6, 10) 

model = Sequential() 
model.add(LSTM(16, input_shape=(6, 10), return_sequences=True)) 
model.add(MaxPooling1D(pool_size=2, strides=1)) 
model.add(LSTM(10)) 
model.add(Dense(1)) 
model.compile(loss='binary_crossentropy', optimizer='sgd') 

# print the summary to see how the dimension change after the layers are 
# applied 

print(model.summary()) 

# try a model with MaxGlobalPooling1D now 

model = Sequential() 
model.add(LSTM(16, input_shape=(6, 10), return_sequences=True)) 
model.add(GlobalMaxPooling1D()) 
model.add(Dense(1)) 
model.compile(loss='binary_crossentropy', optimizer='sgd') 

print(model.summary()) 
+0

:またここに

はあなたと遊ぶことができる例です。どうもありがとう! – KayBay

+0

[x、y、z]テンソルとは何ですか?私はテンソルを初めて使う人です。私はそれが3次元線形関係オブジェクトであることを理解しています。そしてプールは何ですか?この場合、それが読む単語の数ですか?私がリンクやチュートリアルにリダイレクトすることを躊躇しないでください – Marine1

関連する問題