pytorch 无法将权重初始化应用于Conv2d,ConvTranspose2d

kiayqfof  于 2022-11-09  发布在  其他
关注(0)|答案(1)|浏览(154)

目前,我已经研究了DCGAN、LSGAN的权值初始化方法。
一个

def weights_init(m):

  if isinstance(m, nn.Conv2d):
    nn.init.normal_(m.weight.data, 0.0, 0.02)
    print('Conv')

  elif isinstance(m, nn.ConvTranspose2d):
    nn.init.normal_(m.weight.data, 0.0, 0.02)
    print('Trans')

  elif isinstance(m, nn.BatchNorm2d):
    nn.init.normal_(m.weight.data, 1.0, 0.02)
    nn.init.constant_(m.bias, 0)
    print('Batch')

这是我初始化函数
这是我的发电机。
第一个
结果是未应用....
如何应用此初始化...?
我尽力了

def weights_init_normal(m):
    classname = m.__class__.__name__
    if classname.find("Conv") != -1:
        torch.nn.init.normal_(m.weight.data, 0.0, 0.02)
        print('layer success')
    elif classname.find("BatchNorm") != -1:
        torch.nn.init.normal_(m.weight.data, 1.0, 0.02)
        torch.nn.init.constant_(m.bias.data, 0.0)
        print('batch success')

这个功能,但没有应用太多..
我注意到一些层应用了权重初始化,但它是随机的...我试图解决这个问题,但没有
请帮帮我

ecbunoof

ecbunoof1#

经过简单的检查,我没有发现任何证据表明权重和偏差没有按照初始化函数的预期进行初始化。

device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
generator = Generator(100, 64, 1).to(device)
before = deepcopy(generator.state_dict())
generator.apply(weights_init)
after = generator.state_dict()

for k, v in before.items():
    if not k.endswith(("weight", "bias")):
        continue
    if k.endswith("weight"):
        print(torch.std(after[k]).item())
        print(k, torch.allclose(v, after[k]))
    if k.endswith("bias"):
        print(torch.all(before[k]==0.).item(), torch.all(after[k]==0.).item())

相关问题