MaxPooling1D和GlobalMaxPooling1D都被描述为时间数据的最大池操作。
keras.layers.pooling.MaxPooling1D(pool_size=2, strides=None, padding='valid')
我知道GlobalMaxPooling1D没有输入参数。
keras.layers.pooling.GlobalMaxPooling1D()
我想直观地了解他们两个人的工作方式有何不同?
答案 0 :(得分:55)
Td; lr GlobalMaxPooling1D
获取最大向量
步骤维度。因此,在全局汇集之后,具有形状[10,4,10]的张量变为具有形状[10,10]的张量。 MaxPooling1D
在步数上也取最大值,但每个步幅约束为pool_size。所以[{1}}和pooling_size=2
的[10,4,10]张量是stride=1
之后的[10,3,10]张量
使用图形帮助的长答案
假设我们有一个简单的句子,包含3个单词,我们对单词进行了一些矢量编码(如word2vec嵌入)。当然你通常不会游泳池和嵌入Tensor,但这应该是一个例子。整个渠道的全球统筹也起作用,但我将其排除在此图之外。最后,填充的内容稍微复杂一些,但我们也不需要这样。
假设我们有MaxPooling(pooling_size=2, stride=1)
然后
MaxPooling1D(pool_size=2, strides=1).
这样会产生[1,3,3] Tensor,每个时间步长是2D池的最大值。由于我们有3个游泳池,因此我们有效地将时间步长从4减少到3。
但是,如果我们使用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.
,我们将只取该句子的最大向量(Tensor),这可能是单词' live'的向量表示。
确实,这里是如何在keras中定义GlobalMaxPooling1D
GlobalMaxPooling1D
希望有所帮助,请让我澄清一切。
此外,您还可以使用以下示例:
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, features)`
"""
def call(self, inputs):
return K.max(inputs, axis=1)
答案 1 :(得分:1)
@ThePassenger [x,y,z]可以看作是您拥有一个带有x个元素的“数组”,其中每个元素都是一个具有y行和z列的矩阵。而且因为您有一个矩阵,其中有x行和y列,并且每个元素都有一个z元素数组。
池只是减少张量的一种方法,例如,如果您有x行和y列的矩阵,则应用池化可以为x-n行和相同的y-m列的矩阵。