我正在尝试在张量流中实现 pspnet。 它需要一个池模块来接收输入以及几个内核大小:
对每个内核的输入进行平均池化
AveragePooling2D
进行 1x1 卷积,之后使用
UpSampling2D
最后所有不同的转换-解转换输出都连接在一起并前馈
def pyramid_pooling_module(x, pool_sizes):
pool_outputs = []
for pool_size in pool_sizes:
pooled= layers.AveragePooling2D(pool_size)(x)
pooled= layers.Conv2D(512, (1,1), padding='same')(pooled)
pooled= layers.UpSampling2D(size=pool_size, interpolation='bilinear')(pooled)
print(pool_size)
pool_outputs.append(pooled)
return layers.Concatenate()(pool_outputs)
输入的维度为 68, 120 因此,使用的内核(1x1、2x2、3x3、6x6)会因 3x3、6x6 的平均池层而产生舍入误差
这些层的最终池化输出为 (66, 120)
我不知道如何解决这个问题,是否应该将我的输入大小调整为可以被 6x6 整除的大小?还有别的办法吗?
AveragePooling2D 的输出尺寸可能与输入尺寸不同,因为填充的默认值为“有效”。也许设置 padding='same' 可以解决您的问题。