1adrianb / pytorch-estimate-flops

Estimate/count FLOPS for a given neural network using pytorch
https://www.adrianbulat.com
BSD 3-Clause "New" or "Revised" License
305 stars 22 forks source link

giving error 'NoneType' object is not subscriptable #4

Closed Allhailankurgupta closed 4 years ago

Allhailankurgupta commented 4 years ago

I tried to calculate flops earlier and it was working fine but now when I try to calculate flops with this I get this error I used the exact same code given for the resnet18 model in the description please look into the matter

I am using pytorch 1.6

1adrianb commented 4 years ago

@Allhailankurgupta this should be fixed now. Please try to update to the newest version.

Allhailankurgupta commented 4 years ago

can you please update this on pypi also it is working when I clone it and install but not directly from pip

1adrianb commented 4 years ago

the pypi has now the latest version, make sure you use the "--upgrade" flag when reinstalling it.

Allhailankurgupta commented 4 years ago

I used this model given below (VGG) with resnet18 given it is working

but with my model it is not working

it was working with the previous versions

defaultcfg = {
    11 : [64, 'M', 128, 'M', 256, 256, 'M', 512, 512, 'M', 512, 512],
    13 : [64, 64, 'M', 128, 128, 'M', 256, 256, 'M', 512, 512, 'M', 512, 512],
    16 : [64, 64, 'M', 128, 128, 'M', 256, 256, 256, 'M', 512, 512, 512, 'M', 512, 512, 512],
    19 : [64, 64, 'M', 128, 128, 'M', 256, 256, 256, 256, 'M', 512, 512, 512, 512, 'M', 512, 512, 512, 512],
}

# VGG STARTS HERE
class vgg(nn.Module):
    def __init__(self, dataset='cifar10', depth=16, init_weights=True, cfg=None):
        super(vgg, self).__init__()
        if cfg is None:
            cfg = defaultcfg[depth]

        self.cfg = cfg

        self.feature = self.make_layers(cfg, True)

        if dataset == 'cifar10':
            num_classes = 10
        elif dataset == 'cifar100':
            num_classes = 100
        self.classifier = nn.Sequential(
              nn.Linear(cfg[-1], 512),
              nn.BatchNorm1d(512),
              nn.ReLU(inplace=True),
              nn.Linear(512, num_classes)
            )
        if init_weights:
            self._initialize_weights()

    def make_layers(self, cfg, batch_norm=False):
        layers = []
        in_channels = 3
        for v in cfg:
            if v == 'M':
                layers += [nn.MaxPool2d(kernel_size=2, stride=2)]
            else:
                conv2d = nn.Conv2d(in_channels, v, kernel_size=3, padding=1, bias=False)
                if batch_norm:
                    layers += [conv2d, nn.BatchNorm2d(v), nn.ReLU(inplace=True)]
                else:
                    layers += [conv2d, nn.ReLU(inplace=True)]
                in_channels = v
        return nn.Sequential(*layers)

    def forward(self, x):
        x = self.feature(x)
        x = nn.AvgPool2d(2)(x)
        x = x.view(x.size(0), -1)
        y = self.classifier(x)
        return y

    def _initialize_weights(self):
        for m in self.modules():
            if isinstance(m, nn.Conv2d):
                n = m.kernel_size[0] * m.kernel_size[1] * m.out_channels
                m.weight.data.normal_(0, math.sqrt(2. / n))
                if m.bias is not None:
                    m.bias.data.zero_()
            elif isinstance(m, nn.BatchNorm2d):
                m.weight.data.fill_(0.5)
                m.bias.data.zero_()
            elif isinstance(m, nn.Linear):
                m.weight.data.normal_(0, 0.01)
                m.bias.data.zero_()

But now it is throwing this error with my model Screenshot (396)

1adrianb commented 4 years ago

Thanks for catching this, I need to add some tests when I have a chance. This should be fixed on master now. Could you please try again?

1adrianb commented 4 years ago

Yes, i will update the pypi package later on, the source should be fine thought.

Allhailankurgupta commented 4 years ago

It is working now with the code on master. Can you please update it on pypi as well? Also thank you very much for resolving the issue.

1adrianb commented 4 years ago

Done

Allhailankurgupta commented 4 years ago

Thank you very much