如何在pytorch中标准化卷积权重?

时间:2019-05-01 19:19:32

标签: python conv-neural-network pytorch

我在pytorch中有一个CNN,我需要在每次迭代中使用L2范数对卷积权重(滤波器)进行归一化。最有效的方法是什么?

基本上,在我的特定实验中,我需要用模型中的归一化值替换过滤器(在训练和测试期间)。

2 个答案:

答案 0 :(得分:1)

我不确定我是否正确理解了您的问题。但是,如果要求我在每次迭代中对NN层的权重进行归一化,我将做如下操作。

for ite in range(100): # training iteration

    # write your code to train your model
    # update the parameters using optimizer.step() and then normalize

    with torch.no_grad():
        model.conv.weight.div_(torch.norm(model.conv.weight, dim=2, keepdim=True)

在这里,model.conv是指模型的卷积层。 请确保,您在dim函数中适当地输入了torch.norm()参数。我只是将其设置为2,举一个例子。

例如,如果您使用的是Conv1d,则权重参数的形状为(out_channels, in_channels, kW),则可以设置dim=2

答案 1 :(得分:0)

显然,field不够快。

torch.norm()

此外,请查看this文档,该文档可能会让您想到在模型中使用BatchNorm。