Keras 中的最小池化

Mah*_*bir 3 keras tensorflow max-pooling

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

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

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

sna*_*ile 6

否定MaxPooling2D层的输入参数是不够的,因为这样池化的值将是负数。

我认为您最好实际实现一个通用MinPooling2D类,其池化函数获取与 KerasMaxPooling2D类相同的参数并进行类似操作。通过继承自MaxPooling2D,实现非常简单:

from keras import layers
from keras import backend as K

class MinPooling2D(layers.MaxPooling2D):


  def __init__(self, pool_size=(2, 2), strides=None, 
               padding='valid', data_format=None, **kwargs):
    super(MaxPooling2D, self).__init__(pool_size, strides, padding,
                                       data_format, **kwargs)

  def pooling_function(inputs, pool_size, strides, padding, data_format):
    return -K.pool2d(-inputs, pool_size, strides, padding, data_format,
                                                         pool_mode='max')
Run Code Online (Sandbox Code Playgroud)

现在您可以像使用图层一样使用该MaxPooling2D图层。例如,这是一个如何MinPooling2D在简单的序列卷积神经网络中使用层的示例:

from keras import models
from keras import layers

model = models.Sequential()

model.add(layers.Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)))
model.add(MinPooling2D(pool_size=(2, 2)))
model.add(layers.Flatten())
model.add(layers.Dense(10, activation='softmax'))
Run Code Online (Sandbox Code Playgroud)

  • 不确定我是否是唯一的一个,但在 colab 中运行它后,我收到了有关池的错误: TypeError Traceback (mostcentre call last) /usr/local/lib/python3.6/dist-packages/tensorflow/python /keras/utils/conv_utils.py 在 normalize_tuple(value, n, name) 71 尝试: ---> 72 value_tuple = tuple(value) 73 except TypeError: TypeError: 'NoneType' object is not iterable (2认同)