标签: max-pooling

最大池和平均池的混合

在使用Keras(带有TensorFlow后端)调整深层卷积网络时,我想尝试一下MaxPooling2D和之间的混合AveragePooling2D,因为这两种策略似乎都可以改善我的目标的两个不同方面。

我正在考虑这样的事情:

    -------
    |8 | 1|
x = ---+---
    |1 | 6|
    -------

average_pooling(x)                ->   4
max_pooling(x)                    ->   8
hybrid_pooling(x, alpha_max=0.0)  ->   4
hybrid_pooling(x, alpha_max=0.25) ->   5
hybrid_pooling(x, alpha_max=0.5)  ->   6
hybrid_pooling(x, alpha_max=0.75) ->   7
hybrid_pooling(x, alpha_max=1.0)  ->   8
Run Code Online (Sandbox Code Playgroud)

或等式:

hybrid_pooling(x, alpha_max) =
    alpha_max * max_pooling(x) + (1 - alpha_max) * average_pooling(x)
Run Code Online (Sandbox Code Playgroud)

既然看起来好像没有现成的东西,那么如何以有效的方式实现它呢?

python-3.x keras tensorflow max-pooling spatial-pooling

5
推荐指数
1
解决办法
928
查看次数

在某些情况下,在 CNN 中省略池化层是否有意义?

我知道通常的 CNN 由卷积层和池化层组成。池化层使输出更小,这意味着更少的计算,并且它们还以某种方式使其变换不变,因此内核滤波器的特征位置可以在原始图像中稍微移动。

但是当我不使用池化层时会发生什么?原因可能是我想要原始图像中每个像素的特征向量,因此卷积层的输出必须与图像大小相同,只是具有更多通道。这有道理吗?这些特征向量中是否仍然存在有用的信息,或者 CNN 中是否需要池化层?或者是否有一些方法可以通过池化层获取各个像素的特征向量?

machine-learning computer-vision neural-network conv-neural-network max-pooling

5
推荐指数
1
解决办法
3311
查看次数

pytorch 中的通道池化

在张量流中,我可以在深度维度上进行池化,这将减少通道并保持空间维度不变。我试图在 pytorch 中做同样的事情,但文档似乎说池只能在高度和宽度尺寸上完成。有没有办法可以在 pytorch 中汇集通道?我有一个形状张量,[1,512,50,50]我正在尝试使用池化将通道数量减少到 3。我看到了这个问题,但没有发现答案有帮助。

conv-neural-network max-pooling pytorch

5
推荐指数
1
解决办法
4699
查看次数

MaxPooling 是否减少过拟合?

我用较小的数据集训练了以下 CNN 模型,因此它确实过拟合:

model = Sequential()
model.add(Conv2D(32, kernel_size=(3,3), input_shape=(28,28,1), padding='same'))
model.add(BatchNormalization())
model.add(Activation('relu'))

model.add(Conv2D(32, kernel_size=(3,3), padding='same'))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Dropout(0.4))

model.add(Flatten())
model.add(Dense(512))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(Dropout(0.5))
model.add(Dense(10, activation='softmax'))
model.compile(loss="categorical_crossentropy", optimizer=Adam(), metrics=['accuracy'])
Run Code Online (Sandbox Code Playgroud)

该模型有很多可训练的参数(超过 300 万个,这就是为什么我想知道我是否应该像下面这样使用额外的 MaxPooling 来减少参数的数量?

Conv - BN - Act - MaxPooling - Conv - BN - Act - MaxPooling - Dropout - Flatten

或者有一个额外的 MaxPooling 和 Dropout,如下所示?

Conv - BN - Act - MaxPooling - Dropout - Conv - BN - Act - MaxPooling - Dropout - Flatten

我试图了解 MaxPooling …

conv-neural-network max-pooling batch-normalization dropout

5
推荐指数
1
解决办法
2359
查看次数

如何选择keras密集层的前k个元素?

我正在尝试执行 ak-max pooling以选择top-k具有 shape 的密集元素(None, 30)。我尝试了一个MaxPooling1D层,但它不起作用,因为 keras 池化层至少需要一个 2d 输入形状。我正在使用以下Lambda图层,但出现以下错误:

layer_1.shape
(None, 30)
layer_2 = Lambda(lambda x: tf.nn.top_k(x, k=int(int(x.shape[-1])/2),
                                                sorted=True, 
                                                name="Top_k_final"))(layer_1)
Run Code Online (Sandbox Code Playgroud)

错误:文件“/usr/local/lib/python3.5/dist-packages/keras/engine/base_layer.py”,第 474 行,调用 output_shape = self.compute_output_shape(input_shape) 文件“/usr/local/lib/ python3.5/dist-packages/keras/layers/core.py", line 652, in compute_output_shape return K.int_shape(x) File "/usr/local/lib/python3.5/dist-packages/keras/backend/ tensorflow_backend.py", line 591, in int_shape return tuple(x.get_shape().as_list()) AttributeError: 'TopKV2' object has no attribute 'get_shape'

python-3.x keras-layer max-pooling

4
推荐指数
1
解决办法
1026
查看次数

Keras 中的最小池化

我只找到MaxPooling2DAveragePooling2D与tensorflow后端keras。一直在寻找MinimumPooling2D。这个 github链接建议使用这样的东西来进行最小池化 ( pool2d(-x))

在输入之前使用负号时出现错误。我在 keras 中使用的以下行

MaxPooling2D((3, 3), strides=(2, 2), padding='same')(-inputs)
Run Code Online (Sandbox Code Playgroud)

keras tensorflow max-pooling

3
推荐指数
1
解决办法
973
查看次数

AttributeError:模块“keras.backend”没有属性“set_image_dim_ordering”

model = Sequential()
K.set_image_dim_ordering('th')
model.add(Convolution2D(30, 5, 5, border_mode= 'valid' , input_shape=(1, 10, 10),activation= 'relu' ))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Convolution2D(15, 3, 3, activation= 'relu' ))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.2))
model.add(Flatten())
model.add(Dense(128, activation= 'relu' ))
model.add(Dense(50, activation= 'relu' ))
model.add(Dense(10, activation= 'softmax' ))
# Compile model
model.compile(loss= 'categorical_crossentropy' , optimizer= 'adam' , metrics=[ 'accuracy' ])
Run Code Online (Sandbox Code Playgroud)

set_image_dim_ordering()当我使用from时出现错误keras.backend

这是错误报告:AttributeError: module 'keras.backend' has no attribute 'set_image_dim_ordering'

我的进口声明

import numpy as np # linear algebra
import pandas as pd # data processing, CSV file I/O …
Run Code Online (Sandbox Code Playgroud)

python conv-neural-network keras max-pooling

3
推荐指数
1
解决办法
8240
查看次数

1D CNN、2D CNN 和 3D CNN 输入形状之间的差异

我第一次构建用于图像分类的 CNN 模型,我对每种类型(1D CNN、2D CNN、3D CNN)的输入形状以及如何固定滤波器中的滤波器数量感到有点困惑。卷积层。我的数据是 100x100x30,其中 30 是特征。这是我使用函数式 API Keras 编写的 1D CNN 文章:

def create_CNN1D_model(pool_type='max',conv_activation='relu'):
    input_layer = (30,1)
    conv_layer1 = Conv1D(filters=16, kernel_size=3, activation=conv_activation)(input_layer)
    max_pooling_layer1 = MaxPooling1D(pool_size=2)(conv_layer1)

    conv_layer2 = Conv1D(filters=32, kernel_size=3, activation=conv_activation)(max_pooling_layer1)
    max_pooling_layer2 = MaxPooling1D(pool_size=2)(conv_layer2)

    flatten_layer = Flatten()(max_pooling_layer2)
    dense_layer = Dense(units=64, activation='relu')(flatten_layer)

    output_layer = Dense(units=10, activation='softmax')(dense_layer)
    CNN_model = Model(inputs=input_layer, outputs=output_layer)
    return CNN_model
CNN1D = create_CNN1D_model()
CNN1D.compile(loss = 'categorical_crossentropy', optimizer = "adam",metrics = ['accuracy'])
Trace = CNN1D.fit(X, y, epochs=50, batch_size=100)
Run Code Online (Sandbox Code Playgroud)

然而,在尝试通过将 Conv1D、Maxpooling1D 更改为 Conv2D 和 Maxpooling2D 来尝试 2D CNN 模型时,我收到以下错误: …

python conv-neural-network keras max-pooling functional-api

3
推荐指数
1
解决办法
6860
查看次数

问题训练 CNN 与素数输入维度

我目前正在使用 Keras(自动编码器)开发 CNN 模型。这种类型的输入是 shape (47,47,3),即具有 3 (RGB) 层的 47x47 图像。

我过去曾与一些 CNN 合作过,但这次我的输入尺寸是素数(47 像素)。我认为这会导致我的实现出现问题,特别是在我的模型中使用MaxPooling2D和使用时UpSampling2D。我注意到在最大池化然后向上采样时会丢失一些维度

使用model.summary()我可以看到,在将我的(47,47,3)输入通过 aConv2D(24)和 MaxPooling 与(2,2)内核(即 24 个过滤器和一半的形状)后,我得到了(24, 24, 24).

现在,如果我尝试通过带有(2,2)内核的 UpSampling (形状加倍)并再次卷积来反转它,我会得到一个(48,48,3)形状的输出。这比需要的多一行和一列。

对此,我认为“没问题,只需选择一个内核大小,在上采样时为您提供所需的 47 个像素”,但鉴于 47 是一个质数,在我看来,没有内核大小可以做到这一点。

有什么方法可以绕过这个问题而不涉及将我的输入维度更改为非素数?也许我在我的方法中遗漏了一些东西,或者 Keras 有一些我忽略的功能可以在这里提供帮助。

python autoencoder conv-neural-network keras max-pooling

2
推荐指数
1
解决办法
822
查看次数

什么是 K 最大池化?如何在 Keras 中实现它?

我必须在 CNN 模型中添加一个 k-max 池化层来检测虚假评论。请您告诉我如何使用 keras 实现它。

我搜索了互联网,但没有找到好的资源。

machine-learning deep-learning keras max-pooling

2
推荐指数
1
解决办法
2724
查看次数