Beispiel #1
0
    def __init__(self,
                 in_channels,
                 out_channels,
                 kernel_size=3,
                 stride=1,
                 dilation=1,
                 bias=False,
                 transpose=False):

        super().__init__()
        self.in_channels = in_channels
        self.out_channels = out_channels

        self.kernel_size = make_list(kernel_size, 4)
        self.stride = make_list(stride, 4)
        self.dilation = make_list(dilation, 4)

        if isinstance(self.kernel_size, str):
            if self.kernel_size == 'hypercross':
                self.kernel = nn.Parameter(torch.zeros(9, in_channels, out_channels))
            else:
                raise NotImplementedError
        elif np.prod(self.kernel_size) > 1:
            self.kernel = nn.Parameter(torch.zeros(np.prod(self.kernel_size), in_channels, out_channels))
        else:
            assert not transpose
            self.kernel = nn.Parameter(torch.zeros(in_channels, out_channels))
                      
        self.bias = None if not bias else nn.Parameter(torch.zeros(out_channels))
        self.t = transpose
        self.init_weight()

        if kernel_size == 1:
            assert not transpose
Beispiel #2
0
    def __init__(self,
                 in_channels,
                 out_channels,
                 kernel_size=3,
                 stride=1,
                 dilation=1,
                 bias=False,
                 transpose=False):

        super().__init__()
        self.in_channels = in_channels
        self.out_channels = out_channels

        self.kernel_size = make_list(kernel_size)
        self.stride = make_list(stride)
        self.dilation = make_list(dilation)

        if np.prod(self.kernel_size) > 1:
            self.kernel = nn.Parameter(torch.zeros(np.prod(self.kernel_size), in_channels, out_channels))
        else:
            assert not transpose
            self.kernel = nn.Parameter(torch.zeros(in_channels, out_channels))
                      
        self.bias = None if not bias else nn.Parameter(torch.zeros(out_channels))

        self.t = transpose
        self.init_weight()
Beispiel #3
0
    def __init__(self,
                 in_channels,
                 out_channels,
                 kernel_size=3,
                 stride=1,
                 dilation=1,
                 bias=False,
                 transpose=False):

        super().__init__()
        self.in_channels = in_channels
        self.out_channels = out_channels

        self.kernel_size = make_list(kernel_size)
        self.stride = make_list(stride)
        self.dilation = make_list(dilation)

        assert(np.prod(kernel_size) > 1)
        assert(not transpose)

        self.kernel = nn.Parameter(torch.zeros(np.prod(self.kernel_size), in_channels, out_channels))
        self.bias = None if not bias else nn.Parameter(torch.zeros(out_channels))

        self.pkernel = nn.Parameter(torch.zeros(np.prod(self.kernel_size), in_channels, 3 * np.prod(self.kernel_size)))
        self.pkernel.register_hook(self._set_lr)

        self.init_weight()
Beispiel #4
0
    def __init__(
        self,
        kernel_size,
        stride,
        dilation,
    ):

        if isinstance(kernel_size, str):
            if kernel_size == 'hypercross':
                self.stride = make_list(stride, 4)
                self.dilation = make_list(dilation, 4)
                kernel_offset = np.array([[0, 0, 0, 0], [1, 0, 0, 0],
                                          [-1, 0, 0, 0], [0, 1, 0, 0],
                                          [0, -1, 0, 0], [0, 0, 1, 0],
                                          [0, 0, -1, 0], [0, 0, 0, 1],
                                          [0, 0, 0, -1]])

                kernel_offset *= self.stride * self.dilation
            else:
                raise NotImplementedError

        else:
            self.kernel_size = make_list(kernel_size, 4)
            self.stride = make_list(stride, 4)
            self.dilation = make_list(dilation, 4)

            t_offset = (np.arange(-self.kernel_size[0] // 2 + 1,
                                  self.kernel_size[0] // 2 + 1) *
                        self.stride[0] * self.dilation[0]).tolist()
            x_offset = (np.arange(-self.kernel_size[1] // 2 + 1,
                                  self.kernel_size[1] // 2 + 1) *
                        self.stride[1] * self.dilation[1]).tolist()
            y_offset = (np.arange(-self.kernel_size[2] // 2 + 1,
                                  self.kernel_size[2] // 2 + 1) *
                        self.stride[2] * self.dilation[2]).tolist()
            z_offset = (np.arange(-self.kernel_size[3] // 2 + 1,
                                  self.kernel_size[3] // 2 + 1) *
                        self.stride[3] * self.dilation[3]).tolist()

            kernel_offset = np.array([[t, x, y, z] for t in t_offset
                                      for z in z_offset for y in y_offset
                                      for x in x_offset])

        self.kernel_offset = torch.from_numpy(kernel_offset).int()
Beispiel #5
0
    def __init__(self, kernel_size, stride, dilation):

        self.kernel_size = make_list(kernel_size, 3)
        self.stride = make_list(stride, 3)
        self.dilation = make_list(dilation, 3)

        x_offset = (np.arange(-self.kernel_size[0] // 2 + 1,
                              self.kernel_size[0] // 2 + 1) * self.stride[0] *
                    self.dilation[0]).tolist()
        y_offset = (np.arange(-self.kernel_size[1] // 2 + 1,
                              self.kernel_size[1] // 2 + 1) * self.stride[1] *
                    self.dilation[1]).tolist()
        z_offset = (np.arange(-self.kernel_size[2] // 2 + 1,
                              self.kernel_size[2] // 2 + 1) * self.stride[2] *
                    self.dilation[2]).tolist()

        kernel_offset = np.array([[x, y, z] for z in z_offset for y in y_offset
                                  for x in x_offset])

        self.kernel_offset = torch.from_numpy(kernel_offset).int()
Beispiel #6
0
    def __init__(self,
                 in_channels,
                 kernel_size=3,
                 stride=1,
                 dilation=1,
                 bias=False,
                 transpose=False):

        super().__init__()
        self.in_channels = in_channels

        self.kernel_size = make_list(kernel_size, 4)
        self.stride = make_list(stride, 4)
        self.dilation = make_list(dilation, 4)

        assert (np.prod(self.kernel_size) > 1)
        
        self.kernel = nn.Parameter(torch.zeros(np.prod(self.kernel_size), in_channels, 1))              
        self.bias = None

        self.t = transpose

        self.init_weight()