L1 L2正则化

更小权重矩阵的神经网络导致更简单的模型。所以在损失函数后面添加一个数,让损失函数变小。

损失函数太大了,让损失函数的值变小一点点。

import torch
import torch.nn as nn

class RegL1Loss(nn.Module):
  def __init__(self,lam,params):
    super(RegL1Loss,self).__init__()
    self.lam = lam
    self.params = list(params)
    self.n_param = len(self.params)

  def forward(self):
    ls = 0.0
    for param in self.params:
      # L1正则化
      ls +=torch.mean(torch.abs(param))
      # L2正则化 torch.mean(torch.pow(param))
    return self.lam*ls/self.n_param


class Network(nn.Module):
  def __init__(self):
    super(Network,self).__init__()
    self.model = nn.Sequential(
      nn.Linear(19,128),
      nn.ReLU(),
      nn.Linear(128,256),
      nn.ReLU(),
      nn.Linear(256,3)
    )

  def forward(self,x):
    return self.model(x)
  
if __name__=='__main__':
  net = Network()
  loss_fn = nn.MSELoss()
  reg_l1_loss_fn = RegL1Loss(lam=0.1,params=net.parameters())
  # _loss = loss_fn(None,None) #获取任何损失(基于预测和实际值)
  _ll_loss = reg_l1_loss_fn() #求解惩罚项损失
  print(_ll_loss)
  # _loss = _loss+_ll_loss

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值