Skip to content

Fix Densenet module keys having dot #474

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Apr 21, 2018
Merged

Conversation

ssnl
Copy link
Contributor

@ssnl ssnl commented Apr 21, 2018

After pytorch/pytorch#6639, '.'s are no longer allowed in module keys.

cc @lanpa

Copy link
Member

@fmassa fmassa left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think this looks good, thanks!
But I'm a bit worried that we will break a lot of people's models due to that change.

@fmassa fmassa merged commit 6f7e26b into pytorch:master Apr 21, 2018
@ssnl ssnl deleted the fix_densenet branch April 21, 2018 21:08
@ssnl
Copy link
Contributor Author

ssnl commented Apr 21, 2018

@fmassa Yes, some models might be broken. But those are only the ones that use add_module instead of directly assigning as attribute. Without this constraint, module keys might overwrite each other in state_dict, and the loading/saving won't work properly without any error/warning. That would be super hard to debug. So I think it's better to make this check a hard error sooner rather than later :).

@kish7
Copy link

kish7 commented Apr 26, 2018

I'm new to pyTorch , sorry if my question is redundant. Has the solution already been provided for the issue ?

I'm using the newly released pyTorch 0.4 ,
-torchvision 0.2.0
-Windows 10
I'm getting this error when trying to import a pretrained model from densenet.

>>> import torchvision.models as models
>>> mynet=models.densenet161(pretrained=True)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Users\Kishore\Anaconda3\lib\site-packages\torchvision\models\densenet.py", line 68, in densenet161
    **kwargs)
  File "C:\Users\Kishore\Anaconda3\lib\site-packages\torchvision\models\densenet.py", line 142, in __init__
    bn_size=bn_size, growth_rate=growth_rate, drop_rate=drop_rate)
  File "C:\Users\Kishore\Anaconda3\lib\site-packages\torchvision\models\densenet.py", line 98, in __init__
    layer = _DenseLayer(num_input_features + i * growth_rate, growth_rate, bn_size, drop_rate)
  File "C:\Users\Kishore\Anaconda3\lib\site-packages\torchvision\models\densenet.py", line 77, in __init__
    self.add_module('norm.1', nn.BatchNorm2d(num_input_features)),
  File "C:\Users\Kishore\Anaconda3\lib\site-packages\torch\nn\modules\module.py", line 169, in add_module
    raise KeyError("module name can't contain \".\"")
KeyError: 'module name can\'t contain "."'

@lanpa
Copy link
Contributor

lanpa commented Apr 26, 2018

Yes, just reinstall torchvision.

@kish7
Copy link

kish7 commented Apr 27, 2018

Hi @lanpa

>>> import torch
>>> import torch.nn as nn
>>> import torch.backends.cudnn as cudnn
>>> import torchvision
>>> import torchvision.transforms as transforms
>>> import torch.optim as optim
>>> import torch.nn.functional as tfunc
>>> from torch.utils.data import DataLoader
>>> from torch.optim.lr_scheduler import ReduceLROnPlateau
>>> import torch.nn.functional as func
>>>
>>> from sklearn.metrics.ranking import roc_auc_score
>>>
>>> from DensenetModels import DenseNet121
>>> from DensenetModels import DenseNet169
>>> from DensenetModels import DenseNet201
>>> from DatasetGenerator import DatasetGenerator
>>> model = DenseNet121(100,True).cuda()
C:\Users\Kishore\Anaconda3\lib\site-packages\torchvision\models\densenet.py:212: UserWarning: nn.init.kaiming_normal is now deprecated in favor of nn.init.kaiming_normal_.
  nn.init.kaiming_normal(m.weight.data)
>>> model = torch.nn.DataParallel(model).cuda()
>>> pathModel = './models/m-25012018-123527.pth.tar'
>>> modelCheckpoint = torch.load(pathModel)
>>> model.load_local_state_dict(modelCheckpoint['state_dict'])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Users\Kishore\Anaconda3\lib\site-packages\torch\nn\modules\module.py", line 532, in __getattr__
    type(self).__name__, name))
AttributeError: 'DataParallel' object has no attribute 'load_local_state_dict'
>>> model.load_state_dict(modelCheckpoint['state_dict'])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Users\Kishore\Anaconda3\lib\site-packages\torch\nn\modules\module.py", line 721, in load_state_dict
    self.__class__.__name__, "\n\t".join(error_msgs)))
RuntimeError: Error(s) in loading state_dict for DataParallel:
        Missing key(s) in state_dict: "module.densenet121.features.denseblock1.denselayer1.norm1.weight", "module.densenet121.features.denseblock1.denselayer1.norm1.bias", "module.densenet121.features.denseblock1.denselayer1.norm1.running_mean", "module.densenet121.features.denseblock1.denselayer1.norm1.running_var", "module.densenet121.features.denseblock1.denselayer1.conv1.weight", "module.densenet121.features.denseblock1.denselayer1.norm2.weight", "module.densenet121.features.denseblock1.denselayer1.norm2.bias", "module.densenet121.features.denseblock1.denselayer1.norm2.running_mean", "module.densenet121.features.denseblock1.denselayer1.norm2.running_var", "module.densenet121.features.denseblock1.denselayer1.conv2.weight", "module.densenet121.features.denseblock1.denselayer2.norm1.weight", "module.densenet121.features.denseblock1.denselayer2.norm1.bias", "module.densenet121.features.denseblock1.denselayer2.norm1.running_mean", "module.densenet121.features.denseblock1.denselayer2.norm1.running_var", "module.densenet121.features.denseblock1.denselayer2.conv1.weight", "module.densenet121.features.denseblock1.denselayer2.norm2.weight", "module.densenet121.features.denseblock1.denselayer2.norm2.bias", "module.densenet121.features.denseblock1.denselayer2.norm2.running_mean", "module.densenet121.features.denseblock1.denselayer2.norm2.running_var", "module.densenet121.features.denseblock1.denselayer2.conv2.weight", "module.densenet121.features.denseblock1.denselayer3.norm1.weight", "module.densenet121.features.denseblock1.denselayer3.norm1.bias", "module.densenet121.features.denseblock1.denselayer3.norm1.running_mean", "module.densenet121.features.denseblock1.denselayer3.norm1.running_var", "module.densenet121.features.denseblock1.denselayer3.conv1.weight", "module.densenet121.features.denseblock1.denselayer3.norm2.weight", "module.densenet121.features.denseblock1.denselayer3.norm2.bias", "module.densenet121.features.denseblock1.denselayer3.norm2.running_mean", "module.densenet121.features.denseblock1.denselayer3.norm2.running_var", "module.densenet121.features.denseblock1.denselayer3.conv2.weight", "module.densenet121.features.denseblock1.denselayer4.norm1.weight", 
..............................

I am getting the above error when I use model.load_local_state_dict . And also when I use the previously used load_state_dict .

pytorch/pytorch#6639

@lanpa
Copy link
Contributor

lanpa commented Apr 27, 2018

@kish7 You should load state dict before model = torch.nn.DataParallel(model).cuda()

@kish7
Copy link

kish7 commented Apr 27, 2018

@lanpa
I changed the order of execution to

        modelCheckpoint = torch.load(pathModel)
        model.load_local_state_dict(modelCheckpoint['state_dict'])
        
        model = torch.nn.DataParallel(model).cuda() 

And still getting an error

  File "C:\Users\Kishore\Anaconda3\lib\site-packages\torch\nn\modules\module.py", line 532, in __getattr__
    type(self).__name__, name))
AttributeError: 'DenseNet121' object has no attribute 'load_local_state_dict'

@ssnl
Copy link
Contributor Author

ssnl commented Apr 27, 2018 via email

@kish7
Copy link

kish7 commented Apr 27, 2018

@ssnl
I tried that too and didn't work out.

        modelCheckpoint = torch.load(pathModel)
        model.load_state_dict(modelCheckpoint['state_dict'])
        
        model = torch.nn.DataParallel(model).cuda() 

Takes me back to the same error as before .

  File "C:\Users\Kishore\Anaconda3\lib\site-packages\torch\nn\modules\module.py", line 721, in load_state_dict
    self.__class__.__name__, "\n\t".join(error_msgs)))
RuntimeError: Error(s) in loading state_dict for DenseNet121:
        Missing key(s) in state_dict: "densenet121.features.conv0.weight", "densenet121.features.norm0.weight", "densenet121.features.norm0.bias", "densenet121.features.norm0.running_mean", "densenet121.features.norm0.running_var", "densenet121.features.denseblock1.denselayer1.norm1.weight", "densenet121.features.denseblock1.denselayer1.norm1.bias", "densenet121.features.denseblock1.denselayer1.norm1.running_mean", "densenet121.features.denseblock1.denselayer1.norm1.running_var", "densenet121.features.denseblock1.denselayer1.conv1.weight", "densenet121.features.denseblock1.denselayer1.norm2.weight", "densenet121.features.denseblock1.denselayer1.norm2.bias", "densenet121.features.denseblock1.denselayer1.norm2.running_mean", "densenet121.features.denseblock1.denselayer1.norm2.running_var", "densenet121.features.denseblock1.denselayer1.conv2.weight", "densenet121.features.denseblock1.denselayer2.norm1.weight", "densenet121.features.denseblock1.denselayer2.norm1.bias", "densenet121.features.denseblock1.denselayer2.norm1.running_mean", "densenet121.features.denseblock1.denselayer2.norm1.running_var", "densenet121.features.denseblock1.denselayer2.conv1.weight", "densenet121.features.denseblock1.denselayer2.norm2.weight", "densenet121.features.denseblock1.denselayer2.norm2.bias", "densenet121.features.denseblock1.denselayer2.norm2.running_mean", "densenet121.features.denseblock1.denselayer2.norm2.running_var", "densenet121.features.denseblock1.denselayer2.conv2.weight", "densenet121.features.denseblock1.denselayer3.norm1.weight", "densenet121.features.denseblock1.denselayer3.norm1.bias", "densenet121.features.denseblock1.denselayer3.norm1.running_mean", "densenet121.features.denseblock1.denselayer3.norm1.running_var", "densenet121.features.denseblock1.denselayer3.conv1.weight", "densenet121.features.denseblock1.denselayer3.norm2.weight", "densenet121.features.denseblock1.denselayer3.norm2.bias", "densenet121.features.denseblock1.denselayer3.norm2.running_mean", "densenet121.features.denseblock1.denselayer3.norm2.running_var", "densenet121.features.denseblock1.denselayer3.conv2.weight", "densenet121.features.denseblock1.denselayer4.norm1.weight", "densenet121.features.denseblock1.denselayer4.norm1.bias", "densenet121.features.denseblock1.denselayer4.norm1.running_mean", "densenet121.features.denseblock1.denselayer4.norm1.running_var", "densenet121.features.denseblock1.denselayer4.conv1.weight", "densenet121.features.denseblock1.denselayer4.norm2.weight", "densenet121.features.denseblock1.denselayer4.norm2.bias", "densenet121.features.denseblock1.denselayer4.norm2.running_mean", "densenet121.features.denseblock1.denselayer4.norm2.running_var", "densenet121.features.denseblock1.denselayer4.conv2.weight", "densenet121.features.denseblock1.denselayer5.norm1.weight", "densenet121.features.denseblock1.denselayer5.norm1.bias", "densenet121.features.denseblock1.denselayer5.norm1.running_mean", "densenet121.features.denseblock1.denselayer5.norm1.running_var", "densenet121.features.denseblock1.denselayer5.conv1.weight", "densenet121.features.denseblock1.denselayer5.norm2.weight", "densenet121.features.denseblock1.denselayer5.norm2.bias", "densenet121.features.denseblock1.denselayer5.norm2.running_mean", "densenet121.features.denseblock1.denselayer5.norm2.running_var", "densenet121.features.denseblock1.denselayer5.conv2.weight", "densenet121.features.denseblock1.denselayer6.norm1.weight", "densenet121.features.denseblock1.denselayer6.norm1.bias", "densenet121.features.denseblock1.denselayer6.norm1.running_mean", "densenet121.features.denseblock1.denselayer6.norm1.running_var", "densenet121.features.denseblock1.denselayer6.conv1.weight", "densenet121.features.denseblock1.denselayer6.norm2.weight", "densenet121.features.denseblock1.denselayer6.norm2.bias", "densenet121.features.denseblock1.denselayer6.norm2.running_mean", "densenet121.features.denseblock1.denselayer6.norm2.running_var", "densenet121.features.denseblock1.denselayer6.conv2.weight", "densenet121.features.transition1.norm.weight", "densenet121.features.transition1.norm.bias", "densenet121.features.transition1.norm.running_mean", "densenet121.features.transition1.norm.running_var", "densenet121.features.transition1.conv.weight", "densenet121.features.denseblock2.denselayer1.norm1.weight", "densenet121.features.denseblock2.denselayer1.norm1.bias", "densenet121.features.denseblock2.denselayer1.norm1.running_mean", "densenet121.features.denseblock2.denselayer1.norm1.running_var", "densenet121.features.denseblock2.denselayer1.conv1.weight", "densenet121.features.denseblock2.denselayer1.norm2.weight", "densenet121.features.denseblock2.denselayer1.norm2.bias", "densenet121.features.denseblock2.denselayer1.norm2.running_mean", "densenet121.features.denseblock2.denselayer1.norm2.running_var", "densenet121.features.denseblock2.denselayer1.conv2.weight", "densenet121.features.denseblock2.denselayer2.norm1.weight", "densenet121.features.denseblock2.denselayer2.norm1.bias", "densenet121.features.denseblock2.denselayer2.norm1.running_mean", "densenet121.features.denseblock2.denselayer2.norm1.running_var", "densenet121.features.denseblock2.denselayer2.conv1.weight", "densenet121.features.denseblock2.denselayer2.norm2.weight", "densenet121.features.denseblock2.denselayer2.norm2.bias", "densenet121.features.denseblock2.denselayer2.norm2.running_mean", "densenet121.features.denseblock2.denselayer2.norm2.running_var", "densenet121.features.denseblock2.denselayer2.conv2.weight", "densenet121.features.denseblock2.denselayer3.norm1.weight", "densenet121.features.denseblock2.denselayer3.norm1.bias", "densenet121.features.denseblock2.denselayer3.norm1.running_mean", "densenet121.features.denseblock2.denselayer3.norm1.running_var", "densenet121.features.denseblock2.denselayer3.conv1.weight", "densenet121.features.denseblock2.denselayer3.norm2.weight", "densenet121.features.denseblock2.denselayer3.norm2.bias", "densenet121.features.denseblock2.denselayer3.norm2.running_mean", "densenet121.features.denseblock2.denselayer3.norm2.running_var", "densenet121.features.denseblock2.denselayer3.conv2.weight", "densenet121.features.denseblock2.denselayer4.norm1.weight", "densenet121.features.denseblock2.denselayer4.norm1.bias", "densenet121.features.denseblock2.denselayer4.norm1.running_mean", "densenet121.features.denseblock2.denselayer4.norm1.running_var", "densenet121.features.denseblock2.denselayer4.conv1.weight", "densenet121.features.denseblock2.denselayer4.norm2.weight", "densenet121.features.denseblock2.denselayer4.norm2.bias", "densenet121.features.denseblock2.denselayer4.norm2.running_mean", "densenet121.features.denseblock2.denselayer4.norm2.running_var", "densenet121.features.denseblock2.denselayer4.conv2.weight", "densenet121.features.denseblock2.denselayer5.norm1.weight", "densenet121.features.denseblock2.denselayer5.norm1.bias", "densenet121.features.denseblock2.denselayer5.norm1.running_mean", "densenet121.features.denseblock2.denselayer5.norm1.running_var", "densenet121.features.denseblock2.denselayer5.conv1.weight", "densenet121.features.denseblock2.denselayer5.norm2.weight", "densenet121.features.denseblock2.denselayer5.norm2.bias", "densenet121.features.denseblock2.denselayer5.norm2.running_mean", "densenet121.features.denseblock2.denselayer5.norm2.running_var", "densenet121.features.denseblock2.denselayer5.conv2.weight", "densenet121.features.denseblock2.denselayer6.norm1.weight", "densenet121.features.denseblock2.denselayer6.norm1.bias", "densenet121.features.denseblock2.denselayer6.norm1.running_mean", "densenet121.features.denseblock2.denselayer6.norm1.running_var", "densenet121.features.denseblock2.denselayer6.conv1.weight", "densenet121.features.denseblock2.denselayer6.norm2.weight", "densenet121.features.denseblock2.denselayer6.norm2.bias", "densenet121.features.denseblock2.denselayer6.norm2.running_mean", "densenet121.features.denseblock2.denselayer6.norm2.running_var", "densenet121.features.denseblock2.denselayer6.conv2.weight", "densenet121.features.denseblock2.denselayer7.norm1.weight", "densenet121.features.denseblock2.denselayer7.norm1.bias", "densenet121.features.denseblock2.denselayer7.norm1.running_mean", "densenet121.features.denseblock2.denselayer7.norm1.running_var", "densenet121.features.denseblock2.denselayer7.conv1.weight", "densenet121.features.denseblock2.denselayer7.norm2.weight", "densenet121.features.denseblock2.denselayer7.norm2.bias", "densenet121.features.denseblock2.denselayer7.norm2.running_mean", "densenet121.features.denseblock2.denselayer7.norm2.running_var", "densenet121.features.denseblock2.denselayer7.conv2.weight", "densenet121.features.denseblock2.denselayer8.norm1.weight", "densenet121.features.denseblock2.denselayer8.norm1.bias", "densenet121.features.denseblock2.denselayer8.norm1.running_mean", "densenet121.features.denseblock2.denselayer8.norm1.running_var", "densenet121.features.denseblock2.denselayer8.conv1.weight", "densenet121.features.denseblock2.denselayer8.norm2.weight", "densenet121.features.denseblock2.denselayer8.norm2.bias", "densenet121.features.denseblock2.denselayer8.norm2.running_mean", "densenet121.features.denseblock2.denselayer8.norm2.running_var", "densenet121.features.denseblock2.denselayer8.conv2.weight", "densenet121.features.denseblock2.denselayer9.norm1.weight", "densenet121.features.denseblock2.denselayer9.norm1.bias", "densenet121.features.denseblock2.denselayer9.norm1.running_mean", "densenet121.features.denseblock2.denselayer9.norm1.running_var", "densenet121.features.denseblock2.denselayer9.conv1.weight", "densenet121.features.denseblock2.denselayer9.norm2.weight", "densenet121.features.denseblock2.denselayer9.norm2.bias", "densenet121.features.denseblock2.denselayer9.norm2.running_mean", "densenet121.features.denseblock2.denselayer9.norm2.running_var", "densenet121.features.denseblock2.denselayer9.conv2.weight", "densenet121.features.denseblock2.denselayer10.norm1.weight", "densenet121.features.denseblock2.denselayer10.norm1.bias", "densenet121.features.denseblock2.denselayer10.norm1.running_mean", "densenet121.features.denseblock2.denselayer10.norm1.running_var", "densenet121.features.denseblock2.denselayer10.conv1.weight", "densenet121.features.denseblock2.denselayer10.norm2.weight", "densenet121.features.denseblock2.denselayer10.norm2.bias", "densenet121.features.denseblock2.denselayer10.norm2.running_mean", "densenet121.features.denseblock2.denselayer10.norm2.running_var", "densenet121.features.denseblock2.denselayer10.conv2.weight", "densenet121.features.denseblock2.denselayer11.norm1.weight", "densenet121.features.denseblock2.denselayer11.norm1.bias", "densenet121.features.denseblock2.denselayer11.norm1.running_mean", "densenet121.features.denseblock2.denselayer11.norm1.running_var", "densenet121.features.denseblock2.denselayer11.conv1.weight", "densenet121.features.denseblock2.denselayer11.norm2.weight", "densenet121.features.denseblock2.denselayer11.norm2.bias", "densenet121.features.denseblock2.denselayer11.norm2.running_mean", "densenet121.features.denseblock2.denselayer11.norm2.running_var", "densenet121.features.denseblock2.denselayer11.conv2.weight", "densenet121.features.denseblock2.denselayer12.norm1.weight", "densenet121.features.denseblock2.denselayer12.norm1.bias", "densenet121.features.denseblock2.denselayer12.norm1.running_mean", "densenet121.features.denseblock2.denselayer12.norm1.running_var", "densenet121.features.denseblock2.denselayer12.conv1.weight", "densenet121.features.denseblock2.denselayer12.norm2.weight", "densenet121.features.denseblock2.denselayer12.norm2.bias", "densenet121.features.denseblock2.denselayer12.norm2.running_mean", "densenet121.features.denseblock2.denselayer12.norm2.running_var", "densenet121.features.denseblock2.denselayer12.conv2.weight", "densenet121.features.transition2.norm.weight", "densenet121.features.transition2.norm.bias", "densenet121.features.transition2.norm.running_mean", "densenet121.features.transition2.norm.running_var", "densenet121.features.transition2.conv.weight"

@fmassa
Copy link
Member

fmassa commented Apr 27, 2018

It looks like you are using a different model that is not provided by torchvision, is that the case (I see a from DensenetModels import DenseNet121)?
If that's the case, then you probably need to apply the same fixes as the one in this PR to your custom model definition.

@kish7
Copy link

kish7 commented May 2, 2018

Hi @fmassa ,
Sorry about the late response.

import os
import numpy as np

import torch
import torch.nn as nn
import torch.backends.cudnn as cudnn

import torchvision.transforms as transforms
from torch.utils.data import DataLoader
from sklearn.metrics import roc_auc_score

import torchvision

class DenseNet121(nn.Module):

    def __init__(self, classCount, isTrained):
	
        super(DenseNet121, self).__init__()
		
        self.densenet121 = torchvision.models.densenet121(pretrained=isTrained)

        kernelCount = self.densenet121.classifier.in_features
		
        self.densenet121.classifier = nn.Sequential(nn.Linear(kernelCount, classCount), nn.Sigmoid())

    def forward(self, x):
        x = self.densenet121(x)
        return x

This is how DensenetModels.py looks like . You can see that model is being imported from torchvision.
You can take a look at the code I'm trying to run :
https://github.com/zoogzog/chexnet

Thank You.

@fmassa
Copy link
Member

fmassa commented May 9, 2018

@kish7 sorry for the late reply.
Can you try just running the following line

densenet121 = torchvision.models.densenet121(pretrained=True)

If it still gives the same error, and if you are using the latest torchvision, I'd say it's a problem with our Windows version, but I don't have any other ideas yet

@EyalRozenberg1
Copy link

hi @kish7
Did you manage to solve the issue?

Eyal

@ssnl
Copy link
Contributor Author

ssnl commented Jun 12, 2018 via email

varunagrawal pushed a commit to varunagrawal/vision that referenced this pull request Jul 23, 2018
@IlSLY
Copy link

IlSLY commented Dec 17, 2018

`Traceback (most recent call last):
File "main.py", line 112, in
netG = dcgan.DCGAN_G(opt.imageSize, nz, nc, ngf, ngpu, n_extra_layers)
File "/Users/administer/Downloads/WassersteinGAN-master/models/dcgan.py", line 69, in init
nn.ConvTranspose2d(nz, cngf, 4, 1, 0, bias=False))
File "/anaconda3/lib/python3.6/site-packages/torch/nn/modules/module.py", line 180, in add_module
raise KeyError("module name can't contain "."")
KeyError: 'module name can't contain "."'

the above is the error, and below this is my code which was mentioned:
#######################################################
main.add_module('initial.{0}-{1}.convt'.format(nz, cngf),
nn.ConvTranspose2d(nz, cngf, 4, 1, 0, bias=False))
#######################################################
How can I fix it? I didn't find any alternative method.

@fmassa
Copy link
Member

fmassa commented Dec 17, 2018

@IlSLY the solution is to rename the . in the checkpoint, or add a similar patch as to what was done here to your code.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

6 participants