【PyTorch】用PyTorch实现风格迁移所遇到的问题解决方案

1:RuntimeError: storage has wrong size: expected -1122305894 got 128

我们来看一下对应行的代码:

style_model.load_state_dict(t.load(opt.model_path, map_location=lambda _s, _: _s))

很明显这是加载预训练好的模型出错了,笔者再测试了一下需要用到的模型,结果发现没有VGG16,于是下载了VGG16放入对应路径下就解决了这个问题。

VGG16下载链接:https://download.pytorch.org/models/vgg16-397923af.pth
2:Unexpected running stats buffer(s) "upsample_layers.4.running_mean" and "upsample_layers.4.running_var" for InstanceNorm2d with track_running_stats=False. If state_dict is a checkpoint saved before 0.4.0, this may be expected because InstanceNorm2d does not track running stats by default since 0.4.0. Please remove these keys from state_dict. If the running stats are actually needed, instead set track_running_stats=True in InstanceNorm2d to enable them. See the documentation of InstanceNorm2d for details.

报错中说InstanceNorm2d有问题,让我们设置track_running_stats=True。

我们看一下对应报错行的代码,先看一部分含有InstanceNorm2d的代码,如下。

self.initial_layers = nn.Sequential(
            ConvLayer(3, 32, kernel_size=9, stride=1),
            nn.InstanceNorm2d(32, affine=True),
            nn.ReLU(True),
            ConvLayer(32, 64, kernel_size=3, stride=2),
            nn.InstanceNorm2d(64, affine=True),
            nn.ReLU(True),
            ConvLayer(64, 128, kernel_size=3, stride=2),
            nn.InstanceNorm2d(128, affine=True),
            nn.ReLU(True),
        )

按照命令行提示,我们设置将所有含有nn.InstanceNorm2d都设置track_running_stats=True,如下。

self.initial_layers = nn.Sequential(
            ConvLayer(3, 32, kernel_size=9, stride=1),
            nn.InstanceNorm2d(32, affine=True, track_running_stats=True),
            nn.ReLU(True),
            ConvLayer(32, 64, kernel_size=3, stride=2),
            nn.InstanceNorm2d(64, affine=True, track_running_stats=True),
            nn.ReLU(True),
            ConvLayer(64, 128, kernel_size=3, stride=2),
            nn.InstanceNorm2d(128, affine=True, track_running_stats=True),
            nn.ReLU(True),
        )

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章