Keras 中的最大池化
MinimumPooling in Keras
我只在带有tensorflow后端的keras中找到了MaxPooling2D
和AveragePooling2D
。一直在找MinimumPooling2D
。 github link 建议使用类似这样的方法进行最小池化 (pool2d(-x)
)
我在输入前使用负号时出错。我在 keras
中使用的以下行
MaxPooling2D((3, 3), strides=(2, 2), padding='same')(-inputs)
否定 MaxPooling2D
层的输入参数是不够的,因为那样合并的值将是负数。
我认为你最好实际实现一个通用的 MinPooling2D
class ,其池化函数获得与 Keras MaxPooling2D
class 相同的参数并类似地运行。通过继承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')
现在您可以像使用 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'))
将 Keras 与 TF 结合使用,您只需使用 MaxPooling2D()
即可。您将输入特征映射乘以 -1
,执行 MaxPooling2D()
,然后再次将输出乘以 -1
。操作方法在这里:
min_pool = -tf.keras.layers.MaxPooling2D()(-input_features)
我只在带有tensorflow后端的keras中找到了MaxPooling2D
和AveragePooling2D
。一直在找MinimumPooling2D
。 github link 建议使用类似这样的方法进行最小池化 (pool2d(-x)
)
我在输入前使用负号时出错。我在 keras
中使用的以下行MaxPooling2D((3, 3), strides=(2, 2), padding='same')(-inputs)
否定 MaxPooling2D
层的输入参数是不够的,因为那样合并的值将是负数。
我认为你最好实际实现一个通用的 MinPooling2D
class ,其池化函数获得与 Keras MaxPooling2D
class 相同的参数并类似地运行。通过继承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')
现在您可以像使用 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'))
将 Keras 与 TF 结合使用,您只需使用 MaxPooling2D()
即可。您将输入特征映射乘以 -1
,执行 MaxPooling2D()
,然后再次将输出乘以 -1
。操作方法在这里:
min_pool = -tf.keras.layers.MaxPooling2D()(-input_features)