【发布时间】:2021-10-29 20:18:03
【问题描述】:
我想为 PyTorch 预训练的 VGG-16 添加权重标准化。 我能想到的一种可能的解决方案如下,
from torch.nn.utils import weight_norm as wn
import torchvision.models as models
class ResnetEncoder(nn.Module):
def __init__(self):
super(ResnetEncoder, self).__init__()
...
self.encoder = models.vgg16(pretrained=True).features
...
def forward(self, input_image):
self.features = []
x = (input_image - self.mean) / self.std
self.features.append(self.encoder(x))
...
return self.features
class Net(nn.Module):
def __init__(self):
super(Net, self).__init__()
self.encoder = ResnetEncoder() # this is basically VGG16
self.decoder = DepthDecoder(self.encoder.num_ch_enc)
for k,m in self.encoder.encoder._modules.items():
if isinstance(m,nn.Conv2d):
m = wn(m)
def forward(self,x):
return self.decoder(self.encoder(x))
vgg_backbone_model = Net()
vgg_backbone_model.train()
...
但我不知道这是否是将权重归一化添加到预训练的 VGG16 的正确方法。
【问题讨论】: