I’m not sure that (my mathematical idea of) many-to-one and one-to-many mapping might be applicable here. To my mind, more than the VALID mode, the key bit here is the stride and the question “how many translated copies of the convolution stencil fit into the input data” and whether there are columns/rows left over that are too few to fit another stencil copy. These then don’t show up in the convolution output and need to be adjusted for in to get the transposed convolution to output the right shape.