global average pooling:把特征图全局平均一下输出一个值,也就是把W*H*D
的一个张量变成1*1*D
的张量。GAP的真正意义是对整个网路在结构上做正则化防止过拟合,可以实现任意图像大小的输入,但是值得我们注意的是,使用GAP可能会造成收敛速度减慢。
例如:最后的一层的数据是20
个6*6*3
的特征图,global average pooling是将每一张特征图计算所有像素点的均值,输出一个数据值,这样20
个特征图就会输出20
个数据点,变成(20,1*1*3)
如图所示,更加明了
tf.contrib.layers.flatten(A):函数使A
保留第一个维度,把第一个维度包含的每一子张量展开成一个行向量,返回张量是一个二维的,返回的shape为(第一维度,子张量乘积)
一般用于卷积神经网络全连接层前的预处理,因为全连接层需要将输入数据变为一个向量,向量大小为[batch size, ?]
例如:A
是全连接层的输入,则需要将其转换为一个向量。假设A
是一个20*1*1*3
*的矩阵,则通过转换后,得到一个[20,3]
的矩阵,这里20
为卷积神经网络的batch size
,3
则是1*1*3
的乘积
tf.layers.dense(): 改变最后一个维度的数值,如果是10
分类,即把[20,108]
变为[20,10]
例如:
dense(
inputs,
units,
activation=None,
use_bias=True,
kernel_initializer=None,
bias_initializer=tf.zeros_initializer(),
kernel_regularizer=None,
bias_regularizer=None,
activity_regularizer=None,
trainable=True,
name=None,
reuse=None
)
#inputs:输入该网络层的数据
#units:输出的维度大小,改变inputs的最后一维
#activation:激活函数,即神经网络的非线性变化
#use_bias:使用bias为True(默认使用),不用bias改成False即可,是否使用偏置项