MaxPooling1D和GlobalMaxPooling1D都被描述为时间数据的最大池操作.
keras.layers.pooling.MaxPooling1D(pool_size=2, strides=None, padding='valid')
我知道GlobalMaxPooling1D没有输入参数.
keras.layers.pooling.GlobalMaxPooling1D()
我想直观地了解他们两个人的工作方式有何不同?
在大多数体系结构中,conv层后面跟着一个池化层(max/avg等).由于这些汇集层只是选择前一层的输出(即转换),我们是否可以使用带有步幅2的卷积并期望类似的精度结果和减少的过程需求?
给定2D(M x N)矩阵和2D内核(K x L),我如何返回一个矩阵,该矩阵是使用图像上给定内核的最大或均值池的结果?
如果可能的话,我想使用numpy.
注意:M,N,K,L可以是偶数或奇数,并且它们不需要彼此完全可分,例如:7x5矩阵和2x2内核.
例如,最大池:
matrix:
array([[ 20, 200, -5, 23],
[ -13, 134, 119, 100],
[ 120, 32, 49, 25],
[-120, 12, 09, 23]])
kernel: 2 x 2
soln:
array([[ 200, 119],
[ 120, 49]])
Run Code Online (Sandbox Code Playgroud) 我有一个 numpy 数组:
A = np.array([8, 2, 33, 4, 3, 6])
Run Code Online (Sandbox Code Playgroud)
我想要的是创建另一个数组 B,其中每个元素都是 A 中 2 个连续对的成对最大值,所以我得到:
B = np.array([8, 33, 33, 4, 6])
Run Code Online (Sandbox Code Playgroud)
关于如何实施的任何想法?
关于如何为超过 2 个元素实现这一点的任何想法?(同样的事情,但对于连续的 n 个元素)
答案给了我解决这个问题的方法,但是对于 n 大小的窗口情况,是否有更有效的方法不需要循环?
事实证明,该问题等同于询问如何对具有大小为 n 的窗口的列表执行 1d 最大池化。有谁知道如何有效地实现这一点?
我试图跨越渠道维度,以下代码表现出令人惊讶的行为.我希望tf.nn.max_pool并且tf.nn.avg_pool在输入完全相同的参数时应该产生相同形状的张量.不是这种情况.
import tensorflow as tf
x = tf.get_variable('x', shape=(100, 32, 32, 64),
initializer=tf.constant_initializer(5), dtype=tf.float32)
ksize = (1, 2, 2, 2)
strides = (1, 2, 2, 2)
max_pool = tf.nn.max_pool(x, ksize, strides, padding='SAME')
avg_pool = tf.nn.avg_pool(x, ksize, strides, padding='SAME')
print(max_pool.shape)
print(avg_pool.shape)
Run Code Online (Sandbox Code Playgroud)
这打印
$ python ex04/mini.py
(100, 16, 16, 32)
(100, 16, 16, 64)
Run Code Online (Sandbox Code Playgroud)
显然,我误解了一些事情.
我目前正在用普通的 numpy 实现一个 CNN,并且有一个关于最大池层反向传播的特殊情况的简短问题:
虽然很明显非最大值的梯度消失了,但我不确定切片的几个条目等于最大值的情况。严格来说,函数在这个“点”上不应该是可微的。但是,我认为可以从相应的次微分中选择一个次梯度(类似于在 x=0 处为 Relu 函数选择次梯度“0”)。
因此,我想知道简单地形成关于最大值之一的梯度并将剩余的最大值视为非最大值是否就足够了。
如果是这种情况,是否建议随机选择最大值以避免偏差,还是总是选择第一个最大值?
python backpropagation deep-learning conv-neural-network max-pooling
在MaxPool2D填充默认设置为 0 并且ceil_mode也设置为False。现在,如果我有大小的输入7x7与kernel=2,stride=2输出形状变得3x3,但是当我使用ceil_mode=True,它成为4x4,这是有意义的,因为(如果下述式是正确的),用于7x7与output_shape将是3.5x3.5并且取决于ceil_mode这将是任一3x3或4x4。
现在,我的问题是,如果ceil_mode=True, 会更改默认值padding吗?
如果是这样,那么它是如何添加填充的,即它是先在左侧还是在右侧,先向上还是向下添加填充?
我试图了解有关张量流的一些基础知识,并且在阅读最大池2D图层的文档时遇到困难:https://www.tensorflow.org/tutorials/layers#pooling_layer_1
这是max_pooling2d的指定方式:
pool1 = tf.layers.max_pooling2d(inputs=conv1, pool_size=[2, 2], strides=2)
在哪里conv1有一个形状的张量[batch_size, image_width, image_height, channels],具体在这种情况下它是[batch_size, 28, 28, 32].
所以我们的输入是一个形状的张量:[batch_size, 28, 28, 32].
我对最大池2D图层的理解是它将应用大小的过滤器pool_size(在这种情况下为2x2)并且移动滑动窗口stride(也是2x2).这意味着图像width和height图像都将减半,即每个通道最终会有14x14像素(总共32个通道),这意味着我们的输出是一个形状为张量的张量:[batch_size, 14, 14, 32].
但是,根据上面的链接,输出张量的形状是[batch_size, 14, 14, 1]:
Our output tensor produced by max_pooling2d() (pool1) has a shape of
[batch_size, 14, 14, 1]: the 2x2 filter reduces width and height by 50%.
Run Code Online (Sandbox Code Playgroud)
我在这里错过了什么?
32如何转换为1?
他们稍后会应用相同的逻辑:https://www.tensorflow.org/tutorials/layers#convolutional_layer_2_and_pooling_layer_2
但这次是正确的,即 …
我从概念上理解最大/总和池中发生的CNN层操作是什么,但是我看到这个术语"随时间推移的最大池",或者"随时间推移的总和池"(例如,"句子分类的卷积神经网络") Yoon Kim的论文).有什么不同?
我目前尝试在Keras中为时间序列分类构建顺序模型时遇到问题.我想处理channels_first数据,因为从处理的角度来看它更方便(不过我只使用一个通道).这工作得很好了Convolution1D我使用的图层,我可以指定data_sample='channels_first',但不知何故,这不会对工作Maxpooling1D,因为它似乎不具有此选项.
我想要构建的模型结构如下:
model = Sequential()
model.add(Convolution1D(filters=16, kernel_size=35, activation='relu', input_shape=(1, window_length), data_format='channels_first'))
model.add(MaxPooling1D(pool_size=5)
model.add(Convolution1D(filters=16, kernel_size=10, activation='relu', data_format='channels_first'))
[...] #several other layers here
Run Code Online (Sandbox Code Playgroud)
在window_length = 5000添加所有三个图层后,我得到以下摘要:
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
conv1d_1 (Conv1D) (None, 32, 4966) 1152
_________________________________________________________________
max_pooling1d_1 (MaxPooling1 (None, 4, 4966) 0
_________________________________________________________________
conv1d_2 (Conv1D) (None, 16, 4957) 656
=================================================================
Total params: 1,808
Trainable params: 1,808
Non-trainable params: 0
Run Code Online (Sandbox Code Playgroud)
现在,我想知道这是否正确,因为我期望第三维(即特征图中的神经元数)而不是第二维(即过滤器的数量)被汇集层减少?在我看来,MaxPooling1D不承认channels_first订购和而Keras文档说存在一个关键词data_format …
python machine-learning conv-neural-network keras max-pooling
max-pooling ×10
python ×5
keras ×2
numpy ×2
tensorflow ×2
arrays ×1
convolution ×1
matrix ×1
nlp ×1
padding ×1
python-3.x ×1
pytorch ×1