5 from torch import Tensor
7 ######################################################################
9 def minimal_input_size(w, layer_specs):
10 assert w > 0, 'The input is too small'
14 kernel_size, stride = layer_specs[0]
15 v = int(math.ceil((w - kernel_size) / stride)) + 1
16 v = minimal_input_size(v, layer_specs[1:])
17 return (v - 1) * stride + kernel_size
19 ######################################################################
23 if __name__ == "__main__":
25 layer_specs = [ (17, 5), (5, 4), (3, 2), (3, 2) ]
29 for kernel_size, stride in layer_specs:
30 layers.append(nn.Conv2d(1, 1, kernel_size, stride))
32 for kernel_size, stride in reversed(layer_specs):
33 layers.append(nn.ConvTranspose2d(1, 1, kernel_size, stride))
35 m = nn.Sequential(*layers)
37 h = minimal_input_size(240, layer_specs)
38 w = minimal_input_size(320, layer_specs)
40 x = Tensor(1, 1, h, w).normal_()
42 print(x.size(), m(x).size())
44 ######################################################################