【问题标题】:Understanding numpy array shapes了解 numpy 数组形状
【发布时间】:2020-12-08 08:39:56
【问题描述】:

我在理解 numpy 数组形状方面遇到了很多问题。

如果有一个形状为(1, 12, 12, 512)的numpy数组,是什么意思?

  1. 我有 512 个形状为 (1, 12, 12) 的数组。
  2. 我有一组形状(12, 12, 512)

什么意思?

顺便说一下,这个 numpy 数组是来自编码器 CNN 模型的特征图。

如果我将tf.keras.layers.GlobalAveragePooling2D 与该特征图一起使用,我会得到一个形状为(1, 512) 的张量,这让我感到怀疑。

为了展示一个最简单的数组并尝试理解它,我使用了这段代码:

x = tf.constant([[1., 2., 3.],
                 [4., 5., 6.]])
y = tf.reshape(x, [1, 2, 3, 1])

x 数组是:

array([[1., 2., 3.],
       [4., 5., 6.]], dtype=float32)

y 数组是:

array([[[[1.],
         [2.],
         [3.]],

        [[4.],
         [5.],
         [6.]]]], dtype=float32)

所以我认为是第二种选择,但我不确定。

【问题讨论】:

    标签: python numpy conv-neural-network


    【解决方案1】:

    这两种说法都是正确的。但是,最终归结为您的数据对象所代表的内容。如果第一个轴是批次,则更有可能是包含51212x12-特征图的1批次。


    编辑:既然你提到了 Tensorflow,就是这样。该库使用以下格式: (batch, height, width, channels)。与 PyTorch 的运作方式相反,通道位于最后。

    tf.keras.layers.GlobalAveragePooling2D 将在每个批次中将您的每个12x12 特征映射平均为一个点。由于您有 512 个特征图,因此您将得到 (1, 512) 的形状。 “全局” 意味着它将平均整个特征图

    【讨论】:

    • 是的,你是对的,因为最后一个 Conv2D 层的output_channels 是 512,所以我有 512 个大小为 12x12 的特征图,但是,如果你检查我添加到我的问题中的代码,看来第二个选项是正确的。也许是因为我没有完全理解每一件事。非常感谢您的回答。
    • 在您的示例中,y 本质上是单个批次的1 2x3 特征图,在这种情况下将是正确的格式。很高兴我能帮上忙!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-08
    • 2017-03-12
    • 2021-02-22
    • 1970-01-01
    相关资源
    最近更新 更多