view
One transposed convolution, a 2 × 2 input with a 3 × 3 kernel at stride 2, computed two ways. Deposits: each input value is multiplied by every kernel weight, and the resulting patch is added to the output, the stride spacing the patches apart; where they overlap, they sum. Fractionally strided: put a zero between the input samples, pad the border, and run an ordinary stride-1 convolution. The kernel arrives rotated 180°, and the output is the same 5 × 5, number for number. A stride-1 sweep over a zero-stuffed input advances half an input sample per step: a stride of ½, hence the name. Both views are recomputed against each other in figures/verify_numbers.py.