Yon*_*ang 2 python deep-learning conv-neural-network tensorflow resnet
最近,我开始了一个关于分类的项目,使用了一个非常浅的 ResNet。该模型只有 10 次转换。层,然后在 softmax 层之前连接一个全局平均池化层。
性能符合我的预期 --- 93%(是的,没关系)。
但是,由于某些原因,我需要替换 Global avg pooling 层。
我尝试了以下方法:
(给定这一层的输入形状[-1, 128, 1, 32],tensorflow形式)
全局最大池化层。但得到了 85% 的 ACC
指数移动平均线。但得到了 12%(几乎没有用)
split_list = tf.split(input, 128, axis=1)
avg_pool = split_list[0]
beta = 0.5
for i in range(1, 128):
avg_pool = beta*split_list[i] + (1-beta)*avg_pool
avg_pool = tf.reshape(avg_pool, [-1,32])
Run Code Online (Sandbox Code Playgroud)将输入分成 4 部分, avg_pool 每个部分,最后将它们连接起来。但得到了 75%
split_shape = [32,32,32,32]
split_list = tf.split(input,
split_shape,
axis=1)
for i in range(len(split_shape)):
split_list[i] = tf.keras.layers.GlobalMaxPooling2D()(split_list[i])
avg_pool = tf.concat(split_list, axis=1)
Run Code Online (Sandbox Code Playgroud)平均最后一个通道。[-1, 128, 1, 32] --> [-1, 128],没有用 ^
使用转换 具有 1 个内核的层。这样,输出形状为[-1, 128, 1, 1]。但没有用,25% 左右。
我很困惑为什么全局平均池化可以这么好?有没有其他方法可以替换它?
小智 5
全局平均池化相对于完全连接的最终层范式具有以下优势: