[英]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))
。
為什么 output 特征體積的尺寸是 16 x 15 x 54? 我知道有 16 個過濾器,所以前面有 16 個,但是如果我使用[(W−K+2P)/S]+1
來計算維度,則維度不可整除。
有人可以解釋一下嗎?
特征圖的計算是[(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])
您也可能會看到不同的公式來計算特征圖。
一般來說,您可能會看到:
但是兩種情況的結果是一樣的
在卷積層之后估計張量的 output 大小時遇到了同樣的不便。 查看我在https://github.com/tuttelikz/conv_output_size實現的幫助程序 function。
例子:
import torch
import torch.nn as nn
from conv_output_size import conv2d_output_size
c_i, c_o = 3, 16
k, s, p = 3, 2, 1
sample_2d_tensor = torch.ones((c_i, 64, 64))
c2d = nn.Conv2d(in_channels=c_i, out_channels=c_o, kernel_size=k,
stride=s, padding=p)
output_size = conv2d_output_size(
sample_2d_tensor.shape, out_channels=c_o, kernel_size=k, stride=s, padding=p)
print("After conv2d")
print("Dummy input size:", sample_2d_tensor.shape)
print("Calculated output size:", output_size)
print("Real output size:", c2d(sample_2d_tensor).detach().numpy().shape")
>>> After conv2d
>>> Dummy input size: torch.Size([3, 64, 64])
>>> Calculated output size: (16, 32, 32)
>>> Real output size: (16, 32, 32)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.