学习 TensorFlow 的时候,其中有几个函数参数一直很迷惑,现在做一个梳理。
-
strides
strides 的作用很多文章说的是调整感受野在 feature map 中的距离,但是为什么是一个长度为 4 的 list,只用长度为 2 表示在长度和宽度上面移动的距离不就行了吗?而且 strides[0] 和 strides[1] 都必须为1,这是为什么?原来,strides 表示的是在 feature map 的每一维移动的距离。用到移动步长 strides 的地方主要有卷积层的卷积核以及池化层中的池化窗口的移动,也就是以下两个函数
def conv2d(input, filter, strides, padding, use_cudnn_on_gpu=None,data_format=None, name=None)
def max_pool(value, ksize, strides, padding, data_format="NHWC", name=None)
卷积函数中,input 的格式是一个 4维张量 [batch, in_height, in_width, in_channels],那么 strides 的 4 维,就是调整在对应的 input 的每一维移动的步长,具体来说就是
- strides[0]=1,表示在 batch 维度上移动为 1,指不跳过任何一个样本,每一个样本都会进行运算
- strides[1] = 1,表示在 in_height 上移动步长为1,可以自己设定,根据网络的结构合理调节
- strides[2] = 1,表示在 in_width 上的移动步长为1,可以自己设定,根据网络的结构合理调节
- strides[3] = 1,表示在 in_channels 维度上移动为 1,指不跳过任何一个颜色通道,每一个通道都会进行运算
于是, strides[0] 和 strides[1] 都设置为1,表示只能在每次移动一个样本,每个样本每次移动一个通道。
池化函数中的 value 和 卷积函数的 input 格式一样,strides 表示的含义于是也是一样的。
-
dropout
Dropout 是用在全连接层的防止过拟合使用的函数
可以看到 keep_prob 即将被丢弃,官网推荐使用 rate 代替 1-keep_prob。keep_prob 是保留概率,如果设为 1 就意味着全部保留,也就是 dropout 不起作用。
它的参数各个的意义是
推荐使用 rate 表示 x 的每个元素被丢弃的概率。
另外还有各参数就是 noise_shape ,