TensorFlow函数教程: tf.nn.fractional_max_pool
2019-01-31 13:48 更新
tf.nn.fractional_max_pool函数
tf.nn.fractional_max_pool(
value,
pooling_ratio,
pseudo_random=False,
overlapping=False,
deterministic=False,
seed=0,
seed2=0,
name=None
)
请参阅指南:神经网络>池操作
在输入上执行分数最大池化.
分数最大池与常规最大池化略有不同.在常规最大池化中,通过获取集合中较小N×N子部分的最大值(通常为2x2)来缩小输入集的大小,并尝试将集合减少N倍,其中N是整数.正如您可能从“分数”一词所预期的那样,分数最大池化意味着整体缩减比率N不必是整数.
池区域的大小是随机生成的,但是相当均匀.例如,让我们看一下高度维度,以及作为池边界的行列表的约束.
首先,我们定义以下内容:
- input_row_length:输入集中的行数
- output_row_length:要小于输入
- alpha = input_row_length / output_row_length:缩减比率
- K = floor(alpha)
- row_pooling_sequence:这是池边界行的结果列表
然后,row_pooling_sequence应该满足以下条件:
- a [0] = 0:序列的第一个值为0
- a [end] = input_row_length:序列的最后一个值是大小
- K <=(a [i + 1] - a [i])<= K + 1:所有间隔均为K或K+1大小
- length(row_pooling_sequence)= output_row_length + 1
有关分数最大池的更多详细信息,请参阅本文:Benjamin Graham,Fractional Max-Pooling
参数:
- value:一个Tensor,必须是下列类型之一:float32,float64,int32,int64,是4-D的,shape为[batch, height, width, channels].
- pooling_ratio:floats列表,长度>= 4;value的每个维度的池化比率,目前仅支持行和列维度,应该> = 1.0.例如,有效的池化比率可以是[1.0,1.44,1.73,1.0].第一个和最后一个元素必须为1.0,因为我们不允许对批处理和通道维度进行池化.1.44和1.73分别是高度和宽度维度的池化比率.
- pseudo_random:可选的bool,默认为False;当设置为True时,以伪随机方式生成池序列,否则以随机方式生成池序列.伪随机和随机之间的差异可以参阅本文:Benjamin Graham,Fractional Max-Pooling.
- overlapping:可选的bool,默认为False;当设置为True时,表示池化时,两个单元格都使用相邻池化单元边界的值.例如:
如果池化序列是[0,2,4],则索引2处的16将使用两次.对于分数最大池化,结果将是[20,16].index 0 1 2 3 4 value 20 5 16 3 7
- deterministic:可选的bool,默认为False;设置为True时,将在计算图中的FractionalMaxPool节点上进行迭代时使用固定池区域.主要用于单元测试,使FractionalMaxPool具有确定性.
- seed:可选的int,默认为0.如果seed或seed2被设置为非零,则随机数生成器由给定的seed生成,否则,它由随机种子生成.
- seed2:可选的int,默认为0.第二个seed,以避免发生seed碰撞.
- name:操作的名称(可选).
返回:
Tensor对象的元组(output,row_pooling_sequence,col_pooling_sequence).
- output:一个Tensor,与value有相同的类型.
- row_pooling_sequence:一个int64类型的Tensor.
- col_pooling_sequence:一个int64类型的Tensor.