I got the error above when I use the custom batchNorm exactly at this line 3
when I checked the size of the input in my model I get torch.Size([0]) during the training  and torch.Size([1000, 3 ,32, 32]) at test time knowing that the model train with no error w/o batchNorm or with the batchNorm of torch and gives good accuracy. Can you please explain to me how is that possible if the input size is 0 and how to make it work with the custom batchNorm. thank you
class Net(nn.Module):

    def __init__(self, conv1_dim=100, conv2_dim=150, conv3_dim=250, conv4_dim=500):
        super(Net, self).__init__()
        self.conv4_dim = conv4_dim

        self.conv1 = nn.Conv2d(3, conv1_dim, 5, stride=1, padding=2)
        self.conv2 = nn.Conv2d(conv1_dim, conv2_dim, 3, stride=1, padding=2)
        self.conv3 = nn.Conv2d(conv2_dim, conv3_dim, 3, stride=1, padding=2)
        self.conv4 = nn.Conv2d(conv3_dim, conv4_dim, 3, stride=1, padding=2)

        self.pool = nn.MaxPool2d(2, 2)

        self.fc1 = nn.Linear(conv4_dim * 3 * 3, 270) # 3x3 is precalculated and written, you need to do it if you want to change the # of filters
        self.fc2 = nn.Linear(270, 150)
        self.fc3 = nn.Linear(150, 10)

        self.normalize1 = mbn.MyBatchNorm2d(conv1_dim)
        self.normalize2 = mbn.My.BatchNorm2d(conv2_dim)
        self.normalize3 = mbn.MyBatchNorm2d(conv3_dim)
        self.normalize4 = mbn.MyBatchNorm2d(conv4_dim)

    def forward(self, x):
        print(x.size())
        x = self.pool(F.relu(self.normalize1((self.conv1(x))))) # first convolutional then batch normalization then relu then max pool
        x = self.pool(F.relu(self.normalize2((self.conv2(x)))))
        x = self.pool(F.relu(self.normalize3((self.conv3(x)))))
        x = self.pool(F.relu(self.normalize4((self.conv4(x)))))

        x = x.view(-1, self.conv4_dim * 3 * 3) # flattening the features
        x = F.relu(self.fc1(x))
        x = F.relu(self.fc2(x))
        x = self.fc3(x)

        return x

for loss I tested with both nll_loss and cross_entropy