PyTorch 中卷积的输出维度
Output Dimensions of convolution in PyTorch
我的输入图像尺寸为 68 x 224 x 3 (HxWxC),第一个 Conv2d
层定义为
conv1 = torch.nn.Conv2d(3, 16, stride=4, kernel_size=(9,9))
.
为什么输出特征量的大小是16 x 15 x 54?我知道有16个过滤器,所以前面有一个16,但是如果我用[(W−K+2P)/S]+1
计算维度,维度是不可整除的。
有人可以解释一下吗?
feature maps的计算方式是[(W−K+2P)/S]+1
,这里[]
括号表示楼层划分。在您的示例中,填充是 zero
,因此计算是 [(68-9+2*0)/4]+1 ->[14.75]=14 -> [14.75]+1 = 15
和 [(224-9+2*0)/4]+1 -> [53.75]=53 -> [53.75]+1 = 54
。
import torch
conv1 = torch.nn.Conv2d(3, 16, stride=4, kernel_size=(9,9))
input = torch.rand(1, 3, 68, 224)
print(conv1(input).shape)
# torch.Size([1, 16, 15, 54])
您可能会看到不同的公式也计算特征图。
在 PyTorch 中:
一般来说,你可能会看到这个:
但是两种情况的结果是一样的
我的输入图像尺寸为 68 x 224 x 3 (HxWxC),第一个 Conv2d
层定义为
conv1 = torch.nn.Conv2d(3, 16, stride=4, kernel_size=(9,9))
.
为什么输出特征量的大小是16 x 15 x 54?我知道有16个过滤器,所以前面有一个16,但是如果我用[(W−K+2P)/S]+1
计算维度,维度是不可整除的。
有人可以解释一下吗?
feature maps的计算方式是[(W−K+2P)/S]+1
,这里[]
括号表示楼层划分。在您的示例中,填充是 zero
,因此计算是 [(68-9+2*0)/4]+1 ->[14.75]=14 -> [14.75]+1 = 15
和 [(224-9+2*0)/4]+1 -> [53.75]=53 -> [53.75]+1 = 54
。
import torch
conv1 = torch.nn.Conv2d(3, 16, stride=4, kernel_size=(9,9))
input = torch.rand(1, 3, 68, 224)
print(conv1(input).shape)
# torch.Size([1, 16, 15, 54])
您可能会看到不同的公式也计算特征图。
在 PyTorch 中:
一般来说,你可能会看到这个:
但是两种情况的结果是一样的