使用AveragePooling2D而不是GlobalAveragePooling2D来替代稠密层后一个友好通商航海的分类

0

的问题

我可以使用一个AveragePooling2D层与pool_size的大小相等的特征图,而不是一个GlobalAveragePooling2D层? 这样做的目的是要取代一个密集层后FCN。 是GlobalAveragePooling2D一个特殊的情况下AveragePooling2D??

deep-learning keras tensorflow
2021-11-22 13:35:20
2

最好的答案

2

GlobalAveragePooling2D 将下采样的输入通过采取平均值的空间尺寸和返回1D输出默认情况下,除非你设置 keepdims= True. AveragePooling2D 还downsamples输入但需要的平均值超过输入窗口所定义的 pool_size 参数。 因此,它将返回3D输出:

import tensorflow as tf
x = tf.constant([[1., 2., 3.],
                 [4., 5., 6.],
                 [7., 8., 9.]])

x = tf.reshape(x, [1, 3, 3, 1]) # Add batch dimension

avg_pool_2d = tf.keras.layers.AveragePooling2D(pool_size=(2, 2),
   strides=(1, 1), padding='valid')
avg_global_2d = tf.keras.layers.GlobalAveragePooling2D()
print(avg_pool_2d(x).shape)
print(avg_global_2d(x).shape)
(1, 2, 2, 1)
(1, 1)

你可能会压扁你的输出 AveragePooling2D 层如果你想喂它 Dense 层之后:

import tensorflow as tf
x = tf.constant([[1., 2., 3.],
                 [4., 5., 6.],
                 [7., 8., 9.]])

x = tf.reshape(x, [1, 3, 3, 1]) # Add batch dimension

avg_pool_2d = tf.keras.layers.AveragePooling2D(pool_size=(2, 2),
   strides=(1, 1), padding='valid')
avg_global_2d = tf.keras.layers.GlobalAveragePooling2D()
print(tf.keras.layers.Flatten()(avg_pool_2d(x)).shape)
print(avg_global_2d(x).shape)
(1, 4)
(1, 1)

如果不是这种情况下你可以离开,因为它是。

更新: GlobalAveragePooling2DAveragePooling2D 有时可以同样的行为如果你调整 stridespool_size 参数,因此:

import tensorflow as tf
x = tf.constant([[1., 2., 3.],
                 [4., 5., 6.],
                 [7., 8., 9.]])

x = tf.reshape(x, [1, 3, 3, 1]) # Add batch dimension

avg_pool_2d = tf.keras.layers.AveragePooling2D(pool_size=(2, 2),
   strides=(3, 3), padding='valid')
avg_global_2d = tf.keras.layers.GlobalAveragePooling2D()

print(avg_pool_2d(x))
print(avg_global_2d(x))
tf.Tensor([[[[3.]]]], shape=(1, 1, 1, 1), dtype=float32)
tf.Tensor([[5.]], shape=(1, 1), dtype=float32)

avg_pool_2d = tf.keras.layers.AveragePooling2D(pool_size=(3, 3),
   strides=(2, 2), padding='valid')
avg_global_2d = tf.keras.layers.GlobalAveragePooling2D()
tf.Tensor([[[[5.]]]], shape=(1, 1, 1, 1), dtype=float32)
tf.Tensor([[5.]], shape=(1, 1), dtype=float32)
2021-11-22 14:51:04

'x=输入(形=(128,128,3))后,许多友好通商航海层我:'a=Conv2D(200,(1,1),填充='相同的',激活='softmax',data_format='channels_last')(output_of_the_layer_before)'是最后一卷积层然后我做的'b=Lambda(lambda-x:挤(x轴=2))(AveragePooling2D(pool_size=(1,128))(一)
DSPinterested

这个完美的作品的现的具体任务,我有,我不知道,使用GlobalaveragePooling2D可能不是唯一的选择可用于更换稠密层...还有GlobalAveragePooling2D你有选择的'keepdims=True'或'keepdims=False',不能分享我的代码,我希望这对你有意义
DSPinterested

是的,这是有意义的我...但什么是你现在的问题或是什么你不理解?
AloneTogether

如何通过使用AveragePooling2D层如上所述导致几乎相同的分类结果作为GlobalAveragePooling2D! 通常在文献中我们几乎总是看到GlobalAveragePooling2D作为替换为稠密层,在FCN但从来没有见过AveragePooling2D正在使用,而不是一个密集层
DSPinterested

更新的答案,但不能再添加的代码中的评论意见..请更新你的问题的有关代码,结果,和你的问题。
AloneTogether

全球平均汇集的是没有什么特别的。 你可以使用的平均汇集用过滤器的尺寸等于输入的尺寸和有效填补,那么它完全相同。 你甚至可以利用的功能等 tf.reduce_mean. 原因不是,它只是方式更易于使用全球汇集直接...
xdurch0

@xdurch0,有意义!
DSPinterested
0

增加的回答所述,全球平均汇集可用于考虑变量的大小的图像,作为投入。 如果输入的形状之前,全球池的 (N,H,W,C) 然后输出将可以 (N,1,1,C) 为keras时 keepdims=True. 这使得出的图像的不同 (H,W) 产生类似形状的产出。

参考文献:

2021-11-22 13:59:40

其他语言

此页面有其他语言版本

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................