阅读(6k) 书签 (0)

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不必是整数.

池区域的大小是随机生成的,但是相当均匀.例如,让我们看一下高度维度,以及作为池边界的行列表的约束.

首先,我们定义以下内容:

  1. input_row_length:输入集中的行数
  2. output_row_length:要小于输入
  3. alpha = input_row_length / output_row_length:缩减比率
  4. K = floor(alpha)
  5. row_pooling_sequence:这是池边界行的结果列表

然后,row_pooling_sequence应该满足以下条件:

  1. a [0] = 0:序列的第一个值为0
  2. a [end] = input_row_length:序列的最后一个值是大小
  3. K <=(a [i + 1] - a [i])<= K + 1:所有间隔均为K或K+1大小
  4. 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时,表示池化时,两个单元格都使用相邻池化单元边界的值.例如:
    index 0 1 2 3 4
    
    value 20 5 16 3 7
    如果池化序列是[0,2,4],则索引2处的16将使用两次.对于分数最大池化,结果将是[20,16].
  • 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.