5 from torch import Tensor
7 ######################################################################
9 def minimal_input_size(w, layer_specs):
10 assert w > 0, 'The input is too small'
15 w = math.ceil((w - k) / s) + 1
16 w = minimal_input_size(w, layer_specs[1:])
17 return int((w - 1) * s + k)
19 ######################################################################
23 if __name__ == "__main__":
25 layer_specs = [ (11, 5), (5, 2), (3, 2), (3, 2) ]
28 for kernel_size, stride in layer_specs:
29 layers.append(nn.Conv2d(1, 1, kernel_size, stride))
31 for kernel_size, stride in reversed(layer_specs):
32 layers.append(nn.ConvTranspose2d(1, 1, kernel_size, stride))
34 m = nn.Sequential(*layers)
36 h = minimal_input_size(240, layer_specs)
37 w = minimal_input_size(320, layer_specs)
39 x = Tensor(1, 1, h, w).normal_()
41 print(x.size(), m(x).size())
43 ######################################################################