Try   HackMD

卷積輸出大小計算

PyTorch

image

# n, c, h, w
# ceil((in - kernel_size + 1 + (padding * 2)) / stride) = out




# in: [1, 1, 28, 28]
# ----
# (28 - 3 + 1) / 1 = 26
# out: [1, 16, 26, 26]
Conv2d(1, 16, kernel_size=3, stride=1, padding=0)(inputs)

# in: [1, 1, 28, 28]
# ----
# (28 - 3 + 1) / 2 = 13
# out: [1, 16, 13, 13]
Conv2d(1, 16, kernel_size=3, stride=2, padding=0)(inputs)

# in: [1, 1, 28, 28]
# ----
# (28 - 3 + 1 + (1 * 2)) / 2 = 14
# out: [1, 16, 14, 14]
Conv2d(1, 16, kernel_size=3, stride=2, padding=1)(inputs)

# in: [1, 1, 28, 28]
# ----
# (28 - 3 + 1 + (4 * 2)) / 2 = 17
# out: [1, 16, 17, 17]
Conv2d(1, 16, kernel_size=3, stride=2, padding=4)(inputs)

# in: [1, 1, 28, 28]
# ----
# (28 - 5 + 1 + (10 * 2)) / 4 = 11
# out: [1, 16, 11, 11]
Conv2d(1, 16, kernel_size=5, stride=4, padding=10)(inputs)

# in: [1, 1, 28, 28]
# ----
# (28 - 5 + 1 + (10 * 2)) / 3 = 44 / 3 = cile(14.6) = 15
# out: [1, 16, 15, 15]
Conv2d(1, 16, kernel_size=5, stride=3, padding=10)(inputs)

# in: [1, 1, 28, 28]
# ----
# (28 - 3 + 1 + (7 * 2)) / 6 = ceil(40 / 6) = ceil(6.66666) = 7
# out: [1, 16, 7, 7]
Conv2d(1, 16, kernel_size=3, stride=6, padding=7)(inputs)


# in: [1, 16, 26, 26]
# ----
# (26 - 2 + 1 + (0 * 2)) / 2 = floor(25 / 2) = floor(14.5) = 14
# out: [1, 16, 14, 14]
MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)(inputs)