Keras和#x27;MaxPooling1D和globalExpooling1d函数?

Keras和#x27;MaxPooling1D和globalExpooling1d函数?,keras,max-pooling,Keras,Max Pooling,MaxPooling1D和GlobalMapPooling1d都被描述为临时数据的最大池操作 keras.layers.pooling.maxpoolig1d(pool_size=2,strips=None,padding='valid') 我知道GlobalMapooling1D不接受任何输入参数。 keras.layers.pooling.globalExpooling1d() 我只是想从视觉上理解他们两人在工作方式上的不同;lrGlobalMapooling1D用于时态数据的向量取 步骤维

MaxPooling1D和GlobalMapPooling1d都被描述为临时数据的最大池操作

keras.layers.pooling.maxpoolig1d(pool_size=2,strips=None,padding='valid')

我知道GlobalMapooling1D不接受任何输入参数。
keras.layers.pooling.globalExpooling1d()


我只是想从视觉上理解他们两人在工作方式上的不同;lr
GlobalMapooling1D
用于时态数据的向量取 步骤维度。所以一个形状为[10,4,10]的张量在全局合并后成为一个形状为[10,10]的张量
MaxPoolg1d
也会在步数上取最大值,但限制为每一步的池大小。因此,
pooling_size=2和
stride=1的[10,4,10]张量是
MaxPooling(pooling_size=2,stride=1)之后的[10,3,10]张量

带图形辅助的长答案

假设我们有一个包含4个单词的简单句子,我们有一些单词的矢量编码(比如嵌入)。当然,通常情况下,你不会将最大池覆盖并嵌入张量,但举个例子来说,这应该可以。全局池也可以跨通道工作,但我将在本示例中不考虑这一点。最后,填充会让事情变得稍微复杂一些,但我们这里也不需要

假设我们有
maxpoolg1d(池大小=2,步幅=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.
所以这将产生一个[1,3,3]张量,每个时间步都是2D池上的最大值。由于我们有3个池,我们有效地将时间步长从4个减少到了3个

然而,如果我们使用
globalMapooling1d
我们将只取该句子的最大向量(张量),它可能是单词“live”的向量表示

事实上,这里的globalMapooling1d是如何在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, features)`
    """

    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, GlobalMaxPooling1D, MaxPooling1D

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 GlobalMaxPooling1D 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())

@帕森格[x,y,z]可以看作是一个包含x个元素的“数组”,其中每个元素都是一个包含y行和z列的矩阵。而且,当你有一个x行和y列的矩阵时,每个元素都有一个z元素的数组


池只是一种减小张量的方法,例如,如果你有一个由x行和y列组成的矩阵,应用池可以得到一个由x-n行和相同y-m列组成的矩阵。

这是一个很好的解释。谢谢!什么是[x,y,z]张量?我不熟悉张量。我知道这是一个三维线性关系对象。什么是游泳池?在这种情况下,它读的字数是多少?如果解释K.max()如何处理两个向量太长,请毫不犹豫地将我重定向到链接或教程?通过比较标准?