计算PyTorch中4D张量的最大值和最小值

时间:2019-02-22 18:43:01

标签: python numpy pytorch

例如,假设我们有一个4维张量

import torch
X = torch.rand(2, 3, 4, 4)                                                                                                                                                                
tensor([[[[-0.9951,  1.6668,  1.3140,  1.4274],
          [ 0.2614,  2.6442, -0.3041,  0.7337],
          [-1.2690,  0.0125, -0.3885,  0.0535],
          [ 1.5270, -0.1186, -0.4458,  0.1389]],

         [[ 0.9125, -1.2998, -0.4277, -0.2688],
          [-1.6917, -0.8855, -0.2784, -0.6717],
          [ 1.1417,  0.4574,  0.4803, -1.6637],
          [ 0.7322,  0.2654, -0.1525,  1.7285]],

         [[ 1.8310, -1.5765,  0.1392,  1.3431],
          [-0.6641, -1.5090, -0.4893, -1.4110],
          [ 0.5875,  0.7528, -0.6482, -0.2547],
          [-2.3133,  0.3888,  2.1428,  0.2331]]]])

我想计算维度2和3上X的最大值和最小值,即计算两个张量为(2,3,1,1)的张量,其中一个张量为最大值和一个表示4x4块的最小值。

我首先尝试使用torch.max()torch.min()来做到这一点,但是我没有运气。我希望以上函数的dim参数能够采用元组值,但只能采用整数。所以我不知道如何进行。

但是,特别是针对最大值,我决定将torch.nn.MaxPool2d()kernel_size=4一起使用。这确实做到了:

stride=4

但是,afaik,“最小”池没有类似的层。您能帮我如何计算与最大值相似的最小值吗?

谢谢。

1 个答案:

答案 0 :(得分:2)

只需依次计算两个维度的最大值,即可得出相同的结果:

tup = (2,3)
for dim in tup:
    X = torch.max(X,dim=dim,keepdim=True)[0]