Hello everyone,
I’m new to pytorch…
I’m trying to normalize a bank of convolutional filters by their L2-norm (like if every filter was a vector) as in https://arxiv.org/abs/0706.3177.
Basically dividing every matrix for a constant.
This is my code:
class mymodel(nn.Module):

    def __init__(self):
        super(mymodel, self).__init__()
        self.N=64
        self.C_in=1
        self.W=16
        self.W = 16

        self.filters = nn.Parameter(torch.randn(self.N, self.C_in, self.W, self.H), requires_grad=True)


    def normalize_filters(self):

        norm=self.filters.data.pow(2).sum(2).sum(2).pow(1/2)
        self.filters.data=self.filters.data.div(norm.expand_as(self.filters.data))

    def forward(self, *input):

        self.normalize_filters()
        #and following stuff


But when I call normalize_filters() I get the error:
RuntimeError: The expanded size of the tensor (1) must match the existing size (64) at non-singleton dimension 1.

I don’t know if there’s a better solution, I think torch.norm only works for vectors…