例如,假设我们有一个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,“最小”池没有类似的层。您能帮我如何计算与最大值相似的最小值吗?
谢谢。
答案 0 :(得分:2)
只需依次计算两个维度的最大值,即可得出相同的结果:
tup = (2,3)
for dim in tup:
X = torch.max(X,dim=dim,keepdim=True)[0]