X-Git-Url: https://www.fleuret.org/cgi-bin/gitweb/gitweb.cgi?a=blobdiff_plain;f=conv_chain.py;h=3077874c1ea50310452bf15dd6b2f496a705eef6;hb=c16fa89db08b59e454c6ca4b5c68bf7396e876dc;hp=184e06b365ec2cd06bd3a1a05357f874066c316c;hpb=4fc155881f00eda4365ff62e249138394f52a1cd;p=pytorch.git diff --git a/conv_chain.py b/conv_chain.py index 184e06b..3077874 100755 --- a/conv_chain.py +++ b/conv_chain.py @@ -1,12 +1,14 @@ #!/usr/bin/env python -import torch -from torch import nn +# Any copyright is dedicated to the Public Domain. +# https://creativecommons.org/publicdomain/zero/1.0/ + +# Written by Francois Fleuret ###################################################################### -def conv_chain(input_size, output_size, depth, cond): - if depth == 0: +def conv_chain(input_size, output_size, remain_depth, cond): + if remain_depth == 0: if input_size == output_size: return [ [ ] ] else: @@ -14,11 +16,11 @@ def conv_chain(input_size, output_size, depth, cond): else: r = [ ] for kernel_size in range(1, input_size + 1): - for stride in range(1, input_size + 1): - if cond(depth, kernel_size, stride): + for stride in range(1, input_size): + if cond(remain_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) + if n >= output_size and (n - 1) * stride + kernel_size == input_size: + q = conv_chain(n, output_size, remain_depth - 1, cond) r += [ [ (kernel_size, stride) ] + u for u in q ] return r @@ -26,13 +28,16 @@ def conv_chain(input_size, output_size, depth, cond): if __name__ == "__main__": + import torch + from torch import nn + # Example c = conv_chain( input_size = 64, output_size = 8, - depth = 5, + remain_depth = 5, # We want kernels smaller than 4, strides smaller than the - # kernels, and stride of 1 except in the two last layers + # kernels, and strides of 1 except in the two last layers cond = lambda d, k, s: k <= 4 and s <= k and (s == 1 or d <= 2) )