对Pytorch中的整数张量执行最大池

对Pytorch中的整数张量执行最大池,pytorch,Pytorch,我正在定义一个max pool层,并传入一个整数张量,如下所示 max_pool = nn.MaxPool2d(3, stride=2) max_pool(torch.IntTensor(3,5,5).random_(0, 10)) 它抛出以下错误: RuntimeError: _thnn_max_pool2d_with_indices_forward not supported on CPUType for Int 如错误消息所示,nn.MaxPoll2d仅支持浮点输入张量。 在应用池之前

我正在定义一个max pool层,并传入一个整数张量,如下所示

max_pool = nn.MaxPool2d(3, stride=2)
max_pool(torch.IntTensor(3,5,5).random_(0, 10))
它抛出以下错误:

RuntimeError: _thnn_max_pool2d_with_indices_forward not supported on CPUType for Int

如错误消息所示,
nn.MaxPoll2d
仅支持浮点输入张量。

在应用池之前,您需要将输入int张量强制转换为
torch.float

如错误消息所示,
nn.MaxPoll2d
仅支持浮点输入张量。
在应用池之前,您需要将输入int张量转换为
torch.float

PyTorch经过优化,可以使用float。 我重写了你的例子:

import torch.nn as nn
max_pool = nn.MaxPool2d(3, stride=2)
t = torch.Tensor(3,5,5).random_(0, 10)
print(t)
max_pool(t)
您可以只使用张量,而不是
FloatTensor
,因为默认情况下它是32位的float

max_pool = nn.MaxPool2d(3, stride=2)
t = torch.Tensor(3,5,5).uniform_(0, 10)
print(t)
max_pool(t)
输出:

在第二个示例中,我还使用了
统一
函数。您可以猜测输出

tensor([[[4.9505, 4.3413, 2.0268, 0.0171, 5.8553],
         [4.7359, 0.6695, 3.8030, 4.8984, 1.6336],
         [1.0383, 2.5309, 8.2504, 9.2204, 7.0429],
         [7.3840, 7.7813, 8.3955, 3.9352, 2.5984],
         [2.5878, 7.4873, 7.9175, 5.5030, 1.3033]],

        [[8.8296, 8.3914, 1.7067, 6.5193, 7.6584],
         [7.3535, 3.8681, 7.2349, 7.2388, 6.0021],
         [1.9144, 2.0320, 9.7701, 0.6756, 2.4237],
         [5.1340, 1.1434, 5.9940, 2.5115, 0.8283],
         [7.2698, 2.9935, 7.4333, 6.1474, 2.2367]],

        [[6.8579, 5.7366, 6.6372, 1.0188, 0.8168],
         [8.1572, 2.3252, 8.5032, 2.8171, 5.5800],
         [4.3219, 7.7060, 4.2497, 7.4305, 7.7767],
         [3.8406, 4.8675, 9.8044, 2.7436, 7.7930],
         [8.3616, 4.9148, 4.3417, 7.2583, 8.1779]]])

tensor([[[8.2504, 9.2204],
         [8.3955, 9.2204]],

        [[9.7701, 9.7701],
         [9.7701, 9.7701]],

        [[8.5032, 8.5032],
         [9.8044, 9.8044]]])
Pytork经过优化,可用于浮球。 我重写了你的例子:

import torch.nn as nn
max_pool = nn.MaxPool2d(3, stride=2)
t = torch.Tensor(3,5,5).random_(0, 10)
print(t)
max_pool(t)
您可以只使用张量,而不是
FloatTensor
,因为默认情况下它是32位的float

max_pool = nn.MaxPool2d(3, stride=2)
t = torch.Tensor(3,5,5).uniform_(0, 10)
print(t)
max_pool(t)
输出:

在第二个示例中,我还使用了
统一
函数。您可以猜测输出

tensor([[[4.9505, 4.3413, 2.0268, 0.0171, 5.8553],
         [4.7359, 0.6695, 3.8030, 4.8984, 1.6336],
         [1.0383, 2.5309, 8.2504, 9.2204, 7.0429],
         [7.3840, 7.7813, 8.3955, 3.9352, 2.5984],
         [2.5878, 7.4873, 7.9175, 5.5030, 1.3033]],

        [[8.8296, 8.3914, 1.7067, 6.5193, 7.6584],
         [7.3535, 3.8681, 7.2349, 7.2388, 6.0021],
         [1.9144, 2.0320, 9.7701, 0.6756, 2.4237],
         [5.1340, 1.1434, 5.9940, 2.5115, 0.8283],
         [7.2698, 2.9935, 7.4333, 6.1474, 2.2367]],

        [[6.8579, 5.7366, 6.6372, 1.0188, 0.8168],
         [8.1572, 2.3252, 8.5032, 2.8171, 5.5800],
         [4.3219, 7.7060, 4.2497, 7.4305, 7.7767],
         [3.8406, 4.8675, 9.8044, 2.7436, 7.7930],
         [8.3616, 4.9148, 4.3417, 7.2583, 8.1779]]])

tensor([[[8.2504, 9.2204],
         [8.3955, 9.2204]],

        [[9.7701, 9.7701],
         [9.7701, 9.7701]],

        [[8.5032, 8.5032],
         [9.8044, 9.8044]]])

我用了浮动张量,它是固定的

max_pool = nn.MaxPool2d(3, stride=1)
a = torch.FloatTensor(3,5,5).random_(0, 10)
print(a)
tensor([[[2., 8., 6., 8., 3.],
     [6., 6., 7., 6., 6.],
     [2., 0., 8., 8., 8.],
     [2., 0., 3., 5., 7.],
     [9., 7., 8., 2., 1.]],

    [[1., 8., 6., 7., 3.],
     [0., 1., 2., 9., 4.],
     [1., 2., 5., 0., 1.],
     [8., 2., 8., 3., 1.],
     [5., 4., 0., 5., 2.]],

    [[1., 6., 2., 6., 1.],
     [4., 0., 0., 6., 6.],
     [4., 2., 2., 3., 2.],
     [1., 0., 1., 7., 1.],
     [8., 1., 0., 5., 4.]]])
max_pool(a)
tensor([[[8., 8., 8.],
     [8., 8., 8.],
     [9., 8., 8.]],

    [[8., 9., 9.],
     [8., 9., 9.],
     [8., 8., 8.]],

    [[6., 6., 6.],
     [4., 7., 7.],
     [8., 7., 7.]]])

我用了浮动张量,它是固定的

max_pool = nn.MaxPool2d(3, stride=1)
a = torch.FloatTensor(3,5,5).random_(0, 10)
print(a)
tensor([[[2., 8., 6., 8., 3.],
     [6., 6., 7., 6., 6.],
     [2., 0., 8., 8., 8.],
     [2., 0., 3., 5., 7.],
     [9., 7., 8., 2., 1.]],

    [[1., 8., 6., 7., 3.],
     [0., 1., 2., 9., 4.],
     [1., 2., 5., 0., 1.],
     [8., 2., 8., 3., 1.],
     [5., 4., 0., 5., 2.]],

    [[1., 6., 2., 6., 1.],
     [4., 0., 0., 6., 6.],
     [4., 2., 2., 3., 2.],
     [1., 0., 1., 7., 1.],
     [8., 1., 0., 5., 4.]]])
max_pool(a)
tensor([[[8., 8., 8.],
     [8., 8., 8.],
     [9., 8., 8.]],

    [[8., 9., 9.],
     [8., 9., 9.],
     [8., 8., 8.]],

    [[6., 6., 6.],
     [4., 7., 7.],
     [8., 7., 7.]]])

torch.IntTensor(3,5,5).random_u0,10.float()
非常好的例子。
torch.IntTensor(3,5,5.random_0,10.float()
非常好的例子。我继续回到这篇文章。我真的很喜欢这个问题。我一直回到这个帖子。我很喜欢这个问题。