tf.space_to_depth有什么用?

时间:2018-03-06 06:42:34

标签: tensorflow keras

我正在tf.space_to_depth阅读此文件。在那里,它说关于函数的使用:

  

此操作对于调整其间的激活大小非常有用   卷积(但保留所有数据),例如而不是汇集。它是   也可用于训练纯粹的卷积模型。

但是,我仍然没有清楚地了解这一点。为什么有时需要调整模型中的激活大小?

1 个答案:

答案 0 :(得分:3)

space_to_depth是一种卷积练习,经常用于无损空间维数减少。应用张量(example_dim, width, height, channels)block_size = k,它会产生一个形状为(example_dim, width / block_size, height / block_size, channels * block_size ** 2)的张量。它以下列方式工作(为简单起见,跳过example_dim):

  1. 将图片/特征地图切割成大小的块(block_size,block_size,channels):例如以下图片(block_size = 2):

    [[[1], [2], [3], [4]],
     [[5], [6], [7], [8]],
     [[9], [10], [11], [12]],
     [[13], [14], [15], [16]]]
    

    分为以下几个部分:

    [[[1], [2]],       [[[3], [4]],
     [[5], [6]]]        [[7], [8]]]
    
    [[[9], [10],]      [[[11], [12]],
     [[13], [14]]]      [[15], [16]]]
    
  2. 将每个块展平为单个数组

    [[1, 2, 5, 6]],      [[3, 4, 7, 8]]
    [[9 10, 13, 14]],    [[11, 12, 15, 16]]
    
  3. 根据初始位置空间重新排列块

    [[[1, 2, 5, 6]], [[3, 4, 7, 8]],
     [[9 10, 13, 14]], [[11, 12, 15, 16]]]
    
  4. 所以 - 正如您所看到的 - 大小为(4, 4, 1)的初始图片被重新排列为具有形状(2, 2, 4)的要素图。以下策略通常用于对象检测,分割或超分辨率等应用,因为减小图像的空间大小而不会减少缩减(如pooling)非常重要。可以找到例如这种技术的应用的例子。 here