--- tags: Python --- # 卷積輸出大小計算 ### PyTorch ![image](https://hackmd.io/_uploads/rJLHmeeUA.png) ```python # 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) ```