r = [ ]
for kernel_size in range(1, input_size + 1):
for stride in range(1, input_size + 1):
- if cond(kernel_size, stride):
- n = (input_size - kernel_size) // stride
- if n * stride + kernel_size == input_size:
- q = conv_chain(n + 1, output_size, depth - 1, cond)
+ if cond(depth, kernel_size, stride):
+ n = (input_size - kernel_size) // stride + 1
+ if (n - 1) * stride + kernel_size == input_size:
+ q = conv_chain(n, output_size, depth - 1, cond)
r += [ [ (kernel_size, stride) ] + u for u in q ]
return r
c = conv_chain(
input_size = 64, output_size = 8,
depth = 5,
- cond = lambda k, s: k <= 4 and s <= 2 and s <= k//2
+ cond = lambda d, k, s: k <= 4 and s <= k and (s == 1 or d < 3)
)
x = torch.rand(1, 1, 64)