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

标签 tensorflow deep-learning keras pytorch

我是 pytorch 用户。我在 tensorflow 中有一个预训练的模型,我想将它转移到 pytorch 中。在模型架构的一部分中,我的意思是在 tensorflow 定义的模型中,有一个函数 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中制作一个完全相似的图层。

tensorflow 中的一些代码揭示了另一个 secret :
这是一些代码:

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)

这是输出:
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

正如您在上面看到的,除了数据整形之外,张量值也发生了变化!

最佳答案

这个 tf.space_to_depth 将您的输入分成块并将它们连接起来。

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

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

希望能帮助到你。

关于tensorflow - tf.space_to_depth() 如何在 tensorflow 中工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44264962/

相关文章:

python - Keras(Tensorflow 后端)错误 - 在图表中找不到在 feed_devices 或 fetch_devices 中指定的 Tensor input_1 :0,

machine-learning - 如何使用 train_on_batch 检查学习率 [Keras]

python - 与 GPU 一起使用时,packed_pa​​dded_sequence 会出错

python - 两个分类交叉熵之间的凸组合

python - Keras 中的自定义损失函数仅运行一次

Keras:在特定层之后停止渐变

python - tensorflow 服务器 : I don't want to initialize global variables for every session

android - 从在 Android 上运行的 Open Images 数据集中获取预训练的 Inception v3 模型

bash - 在 pyCharm 上使用 tensorflow

tensorflow - 如何显示错误分类的图像?