作为CFtorch中的正则化因子的L1范数

时间:2017-10-17 19:41:12

标签: keras torch pytorch regularized

我需要添加一个L1规范作为正则化器,以便在我的神经网络中创建稀疏条件。我想训练我的网络进行分类,我需要添加一个L1规范作为规范化器来创建稀疏性条件。我需要训练网络到分类,我从pytorch开始,我没有任何ideia如何做到这一点。我尝试自己构建一个L1规范,如here,但也没有用。

有人能帮助我吗?我需要把这个正规化器放在ConvTranspose2d之后,我想在Keras做这样的事情:

model.add(Dense(64, input_dim=64,
            kernel_regularizer=regularizers.l2(0.01),
            activity_regularizer=regularizers.l1(0.01)))

但我的网络是根据以下代码在PyTorch中创建的

upconv = nn.ConvTranspose2d(inner_nc, outer_nc,
                                    kernel_size=4, stride=2,
                                    padding=1, bias=use_bias)
        down = [downrelu, downconv]
        up = [uprelu, upconv, upnorm]
        model = down + up

由于

2 个答案:

答案 0 :(得分:1)

你正在过度思考这个问题。正如我从您的Keras代码中看到的那样,您试图对图层的激活施加L1惩罚。最简单的方法就是做以下事情:

activations_to_regularise = upconv(input)
output = remaining_netowrk(activations_to_regularise)

然后有你的正常损失函数来评估目标的输出,并将L1损失纳入目标,这样你就得到了

total_loss = criterion(output, target) + 0.01 * activations_to_regularise.abs()

答案 1 :(得分:1)

在pytorch中,您可以执行以下操作(假设您的网络名为net):

def l1_loss(x):
    return torch.abs(x).sum()

to_regularise = []
for param in net.parameters():
    to_regularise.append(param.view(-1))
l1 = l1_weight*l1_loss(torch.cat(to_regularise))