我正在tf.space_to_depth
阅读此文件。在那里,它说关于函数的使用:
此操作对于调整其间的激活大小非常有用 卷积(但保留所有数据),例如而不是汇集。它是 也可用于训练纯粹的卷积模型。
但是,我仍然没有清楚地了解这一点。为什么有时需要调整模型中的激活大小?
答案 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
):
将图片/特征地图切割成大小的块(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]]]
将每个块展平为单个数组:
[[1, 2, 5, 6]], [[3, 4, 7, 8]]
[[9 10, 13, 14]], [[11, 12, 15, 16]]
根据初始位置空间重新排列块
[[[1, 2, 5, 6]], [[3, 4, 7, 8]],
[[9 10, 13, 14]], [[11, 12, 15, 16]]]
所以 - 正如您所看到的 - 大小为(4, 4, 1)
的初始图片被重新排列为具有形状(2, 2, 4)
的要素图。以下策略通常用于对象检测,分割或超分辨率等应用,因为减小图像的空间大小而不会减少缩减(如pooling
)非常重要。可以找到例如这种技术的应用的例子。 here