with its own set of filters (of size
          \frac{\text{out_channels}}{\text{in_channels}}).
The parameters "kernel_size", "stride", "padding", "output_padding"
   can either be:
  * a single "int" -- in which case the same value is used for the
    height and width dimensions

  * a "tuple" of two ints -- in which case, the first *int* is
    used for the height dimension, and the second *int* for the
    width dimension

Note:
 The "padding" argument effectively adds "dilation * (kernel_size
 - 1) - padding" amount of zero padding to both sizes of the
 input. This is set so that when a "Conv2d" and a
 "ConvTranspose2d" are initialized with same parameters, they are
 inverses of each other in regard to the input and output shapes.
 However, when "stride > 1", "Conv2d" maps multiple input shapes
 to the same output shape. "output_padding" is provided to resolve
 this ambiguity by effectively increasing the calculated output
