一、前言
本篇简要介绍一下反全局平均池化原理以及api实现。
二、相关概念
反全局平均池化属于全局平均池化(TensorFlow中的api为tf.avg_pool)的逆操作,主要用于信息的还原,但是因为在池化的过程中不可避免的会丢失一部分的信息,所以我们并不能指望反全局平均池化的复原效果有想象中的能力。
其原理如图所示:
如图所示,反全局平均池化是近似全局平均池化的逆操作,也就是一个均值映射的过程。
三、代码实现
#反全局平均池化
def max_avg_pool(net,nwp_shape,nwp_shape_T):#创建零张量network=tf.Variable(tf.zeros([batch_size,nwp_shape[1],nwp_shape[1],nwp_shape_T],dtype=tf.float32))for item in range(batch_size):# 遍历通道数for i in range(nwp_shape_T):tmp_num = net[item, 0, 0, i]for j in range(nwp_shape[1]):for k in range(nwp_shape[1]):network[item, j, k, i].assign(tmp_num)return network
四、总结与分析
在写该函数的过程中,本来以为简单的原理实现起来并不复杂,虽然实现了但是还是产生了如下几点问题:
1.使用了多层嵌套的for循环,增加了程序执行的时间复杂度,并且目前还没有找到好的解决办法。
2.当占位符定义为None时,由于?所代表的数字,并不能被range,程序也就不能知道在构造反池化的结构时,到底要申请多少个内存空间,所以本代码中以固定的batch_size来构造确定的网络结构。所以其网络的通用性会弱一些,如果有更好的建议和方法欢迎给出,感激不尽。
五、参考书目
《深度学习之TensorFlow入门、原理与进阶实战》李金洪 ISBN 978-7-111-59005-7