相关疑难解决方法(0)

在PyTorch中添加L1/L2正则化?

有什么办法,我可以在PyTorch中添加简单的L1/L2正则化吗?我们可以通过简单地添加data_losswith 来计算正则化损失reg_loss但是有没有明确的方法,PyTorch库的任何支持都可以更轻松地完成它而不需要手动执行它?

pytorch

23
推荐指数
7
解决办法
4万
查看次数

Pytorch 中缺乏 L1 正则化的稀疏解决方案

我正在尝试在简单神经网络的第一层(1 个隐藏层)上实现 L1 正则化。我查看了 StackOverflow 上的一些其他帖子,这些帖子使用 Pytorch 应用 l1 正则化来弄清楚它应该如何完成(参考:在 PyTorch 中添加 L1/L2 正则化?在 Pytorch 中,如何将 L1 正则化添加到激活中?)。无论我将 lambda(l1 正则化强度参数)增加多高,我都不会在第一个权重矩阵中得到真正的零。为什么会这样?(代码如下)

import torch
import torch.nn as nn
import torch.nn.functional as F
import numpy as np

class Network(nn.Module):
    def __init__(self,nf,nh,nc):
        super(Network,self).__init__()
        self.lin1=nn.Linear(nf,nh)
        self.lin2=nn.Linear(nh,nc)

    def forward(self,x):
        l1out=F.relu(self.lin1(x))
        out=F.softmax(self.lin2(l1out))
        return out, l1out

def l1loss(layer):
    return torch.norm(layer.weight.data, p=1)

nf=10
nc=2
nh=6
learningrate=0.02
lmbda=10.
batchsize=50

net=Network(nf,nh,nc)

crit=nn.MSELoss()
optimizer=torch.optim.Adagrad(net.parameters(),lr=learningrate)


xtr=torch.Tensor(xtr)
ytr=torch.Tensor(ytr)
#ytr=torch.LongTensor(ytr)
xte=torch.Tensor(xte)
yte=torch.LongTensor(yte)
#cyte=torch.Tensor(yte)

it=200
for epoch in range(it):
    per=torch.randperm(len(xtr))
    for i …
Run Code Online (Sandbox Code Playgroud)

neural-network python-3.x regularized pytorch

6
推荐指数
1
解决办法
1950
查看次数

如何将 L1 正则化添加到 PyTorch NN 模型?

在寻找在 PyTorch 模型中实现 L1 正则化的方法时,我遇到了这个问题,现在已经有 2 年历史了,所以我想知道这个主题是否有任何新内容?

我还发现了这种处理缺少的 l1 函数的最新方法。但是我不明白如何将它用于基本的神经网络,如下所示。

class FFNNModel(nn.Module):
    def __init__(self, input_dim, output_dim, hidden_dim, dropout_rate):
        super(FFNNModel, self).__init__()
        self.input_dim = input_dim
        self.output_dim = output_dim
        self.hidden_dim = hidden_dim
        self.dropout_rate = dropout_rate
        self.drop_layer = nn.Dropout(p=self.dropout_rate)
        self.fully = nn.ModuleList()
        current_dim = input_dim
        for h_dim in hidden_dim:
            self.fully.append(nn.Linear(current_dim, h_dim))
            current_dim = h_dim
        self.fully.append(nn.Linear(current_dim, output_dim))

    def forward(self, x):
        for layer in self.fully[:-1]:
            x = self.drop_layer(F.relu(layer(x)))
        x = F.softmax(self.fully[-1](x), dim=0)
        return x
Run Code Online (Sandbox Code Playgroud)

我希望在训练前简单地把它放在一边:

model = FFNNModel(30,5,[100,200,300,100],0.2)
regularizer = …
Run Code Online (Sandbox Code Playgroud)

python neural-network pytorch loss-function

3
推荐指数
1
解决办法
3086
查看次数