tf.space_to_depth()在tensorflow中如何工作?

Moa*_*hdi 5 deep-learning keras tensorflow pytorch

我是pytorch用户。我在张量流中有一个预训练的模型,我想将其转移到pytorch中。在模型架构的一部分中,我的意思是在张量流定义的模型中,有一个函数tf.space_to_depth将输入大小(None,38,38,64)转换为(None,19,19,256)。(https://www.tensorflow.org/api_docs/python/tf/space_to_depth)是此功能的文档。但我不明白此功能的实际作用。您能提供一些numpy代码为我说明一下吗?

实际上,我想在pytorch中制作一个完全相似的图层。

张量流中的一些代码揭示了另一个秘密:这是一些代码:

import numpy as np
import tensorflow as tf

norm = tf.random_normal([1, 2, 2, 1], mean=0, stddev=1)
trans = tf.space_to_depth(norm,2)

with tf.Session() as s:
    norm = s.run(norm)
    trans = s.run(trans)



print("Norm")
print(norm.shape)
for index,value in np.ndenumerate(norm):
    print(value)

print("Trans")
print(trans.shape)
for index,value in np.ndenumerate(trans):
    print(value)
Run Code Online (Sandbox Code Playgroud)

这是输出:

Norm
(1, 2, 2, 1)
0.695261
0.455764
1.04699
-0.237587
Trans
(1, 1, 1, 4)
1.01139
0.898777
0.210135
2.36742
Run Code Online (Sandbox Code Playgroud)

如上所示,除了数据重塑之外,张量值也已更改!

A. *_*iro 4

此 tf.space_to_depth 将您的输入划分为块并将它们连接起来。

在你的例子中,输入是 38x38x64 (我猜 block_size 是 2)。因此,该函数将您的输入分为 4 个(块大小 x 块大小)并将它们连接起来,得到 19x19x256 的输出。

您只需将每个通道(输入)划分为 block_size*block_size 补丁(每个补丁的大小为 width/block_size x height/block_size),然后连接所有这些补丁。使用 numpy 应该非常简单。

希望能帮助到你。