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

2023-12-22

我正在尝试在简单神经网络的第一层(1 个隐藏层)上实现 L1 正则化。我查看了 StackOverflow 上的其他一些帖子,这些帖子使用 Pytorch 应用 l1 正则化来弄清楚应该如何完成(参考文献:在 PyTorch 中添加 L1/L2 正则化? https://stackoverflow.com/questions/42704283/adding-l1-l2-regularization-in-pytorch, 在 Pytorch 中,如何将 L1 正则化器添加到激活中? https://stackoverflow.com/questions/44641976/in-pytorch-how-to-add-l1-regularizer-to-activations)。无论我将 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 in range(0,len(xtr),batchsize):
        ind=per[i:i+batchsize]
        bx,by=xtr[ind],ytr[ind]            
        optimizer.zero_grad()
        output, l1out=net(bx)
#        l1reg=l1loss(net.lin1)    
        loss=crit(output,by)+lmbda*l1loss(net.lin1)
        loss.backward()
        optimizer.step()
    print('Epoch [%i/%i], Loss: %.4f' %(epoch+1,it, np.float32(loss.data.numpy())))

corr=0
tot=0
for x,y in list(zip(xte,yte)):
    output,_=net(x)
    _,pred=torch.max(output,-1)
    tot+=1 #y.size(0)
    corr+=(pred==y).sum()
print(corr)

注意:数据有 10 个特征(2 个类别和 800 个训练样本),并且只有前 2 个是相关的(根据设计),因此人们会假设真正的零应该很容易学习。


您的使用情况layer.weight.data从其自动微分上下文中删除参数(这是一个 PyTorch 变量),使其在优化器获取梯度时成为常量。这会导致梯度为零并且不会计算 L1 损失。

如果您删除.data,范数是由 PyTorch 变量计算的,并且梯度应该是正确的。

有关 PyTorch 自动微分机制的更多信息,请参阅此文档文章 http://pytorch.org/docs/stable/autograd.html或这个tutorial http://pytorch.org/tutorials/beginner/blitz/autograd_tutorial.html.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Pytorch 中缺乏 L1 正则化的稀疏解决方案 的相关文章

  • Windows 中的 Python 多处理池奇怪行为

    Python 多处理池在 Linux 和 Windows 之间有不同的行为 当按工作人员数量运行方法映射时 在 Linux 中 它会在您作为参数提供的特定函数的范围内运行该进程 但在 Windows 中 每个工作进程都在父进程的范围内运行
  • 将文件拆分为块

    我正在尝试分割格式为以下的文件 some garbage lines target G0 S0 type xy 0 108847E 02 0 489034E 04 0 108711E 02 0 491023E 04 0 108574E 02
  • 从 C++ 调用 Python 脚本并使用其输出

    我想从 C 调用 python 脚本 并希望使用该脚本生成的输出 csv 文件返回 C 我在 main 中尝试过 std string filename home abc xyz script py std string command p
  • 仅使用 pathlib 规范化不存在的路径

    python 最近添加了pathlib https docs python org 3 4 library pathlib html module pathlib模块 我非常喜欢 我只有一件事正在努力解决 是否可以规范化不存在的文件或目录的
  • Selenium 3 Firefox .click() 不起作用

    自从我升级到最新的 Selenium 版本后 我的 Firefox 驱动程序无法正常工作 未能通过搜索 Google Stack 找到答案 我希望这里有人能找到答案 我已经构建了一个页面对象模型 用于登录网页 单击管理站点并填写用户名 密码
  • 适用于 Python 3.x 的 Hive 客户端

    是否可以使用 Python 3 x 连接到 hadoop 并运行 hive 查询 我正在使用Python 3 4 1 我发现可以按照这里写的方式完成 https cwiki apache org confluence display Hiv
  • 如果每个区域内至少有 5 个连续行,如何在每个标题区域的末尾使用 Title[Name]2 发布新行?

    我想在每个 Title 区域的末尾使用 Title Name 2 发布新行的最简单方法是通过一个计算连续行数的变量 其中至少有 5 个连续行包含 1 1 1 1在每个 标题区域内 我不确定我对计数变量做错了什么 也许 确实必须在每个 Tit
  • 使用神经网络包进行多项分类

    这个问题应该很简单 但文档没有帮助 我正在使用 R 我必须使用neuralnet多项式分类问题的包 所有示例均针对二项式或线性输出 我可以使用二项式输出进行一些一对一的实现 但我相信我应该能够通过使用 3 个单元作为输出层来做到这一点 其中
  • 如何将体积补丁存储到 HDF5 中?

    我有一个尺寸的体积数据256x128x256 由于内存有限 我无法将整个数据直接输入到 CAFFE 因此 我会随机选择n sample补丁50x50x50从体积数据中提取并将其存储到 HDF5 中 我成功地从原始数据及其标签中随机提取了补丁
  • 在 python 2 或 python 3 中编写 csv 文件的便携式方法

    在我的 Windows 机器上 我通常在 python 2 中这样做来编写 csv 文件 import csv f open out csv wb cr csv writer f delimiter cr writerow a b c f
  • 使用 selenium 进行身份验证 (Python)

    我有指向我网站管理区域的链接 是否可以使用 selenium 在给定的浏览器中 启动这些 URI 链接 而无需事先进行身份验证 如果没有 那么我如何使用 selenium 处理身份验证 不确定您的意思 但您可以仅使用选择器并在身份验证字段中
  • 无法打开 Python。错误 0xc000007b

    我最近一直在学习 Python 3 我在我的上网本 32 位 Windows 7 上创建简单的小程序没有任何问题 当我将它安装在我的上网本上时 我没有遇到任何问题 但现在我已经开始使用它了 我想将它安装在我的台式机上 并且我有一个 我的桌面
  • Keras IndexError:索引超出范围

    我是 Keras 新手 我尝试在数据集上执行二进制 MLP 并且不断使索引超出范围 但不知道为什么 from keras models import Sequential from keras layers core import Dens
  • 无法截取宽度为 0 的屏幕截图

    我正在尝试截取 Bootstrap 模态内元素的屏幕截图 经过一番努力 我终于想出了这段代码 driver get https enlinea sunedu gob pe driver find element by xpath div c
  • python 3.4 计算 .txt 文件中的出现次数

    我正在为我正在上课的课程编写一个 简单 的小程序 这应该询问我要搜索哪个团队 然后返回它出现在 txt 文件列表中的次数 它像它应该的那样请求输入 并且看起来运行得很好 它现在已经运行了一个小时 我完全没有收到任何错误 它似乎陷入了循环 预
  • 复制单元格包含多条数据的行

    我想获取一个数据框并复制某些行 一列 称为name 可能有多个名称 下面构建了一个示例数据框 data Joe 17 11 2018 2 Karen 17 11 2018 4 Bill Avery 17 11 2018 6 Sam 18 1
  • 如何屏蔽 PyTorch 权重参数中的权重?

    我正在尝试在 PyTorch 中屏蔽 强制为零 特定权重值 我试图掩盖的权重是这样定义的def init class LSTM MASK nn Module def init self options inp dim super LSTM
  • 带圆角的 Seaborn 条形图

    我正在尝试绘制一些条形图 但想控制角的圆度 我尝试按照堆栈问题中提供的答案进行操作Matplotlib 中带圆角的条形图 https stackoverflow com questions 58425392 bar chart with r
  • Python3 查找 2 个列表中有多少个差异才能相等

    假设我们有 2 个列表 always具有相同的长度和always包含字符串 list1 sot sot ts gg gg gg list2 gg gg gg gg gg sot 我们需要找到 其中有多少项list2应该改变 以便它等于lis
  • 将此 MATLAB 代码转换为 Python 时我做错了什么?

    我正在努力将生成波形的 MATLAB 代码转换为 Python 就上下文而言 这是原子力显微镜带激发响应的模拟 与代码错误无关 在 MATLAB 中从 r vec 生成的图形与我在 Python 中生成的图形不同 我是否正确地将 MATLA

随机推荐

  • 我们如何在 React Native 应用程序中设置 .env?

    我们如何设置 env在反应本机应用程序中 如何在react native中进行环境设置 我使用 react native dotenv 包 安装它并将 react native dotenv 预设添加到项目根目录下的 babelrc 文件中
  • XBAP 与 FireFox 和 Windows 7

    Firefox 依赖 NET 3 5 安装程序安装的扩展和插件来运行 XBAP 不幸的是 在 Windows 7 中已经安装了 NET 3 5 运行时 有谁知道如何获取这些插件 扩展 以便您可以实际将 XBAP 部署到 Windows 7
  • Flex:当文本太长时换行

    我在想是否可以使用css来实现以下功能flexbox 在布局中 原来有2个div彼此相邻 左侧包含一组图标并具有固定宽度 右侧包含文本 可能会很长 有没有办法 如何使用只有CSS 尤其是Flexbox 当文本太长时 div 会换行 在第一个
  • 别名可变原始指针 (*mut T) 是否会导致未定义的行为?

    mut T and mut T导致编译错误 这太棒了 两次可变借用在客观上是错误的 Is mut T and mut T未定义的行为还是这是完全有效的事情 也就是说 可变指针别名有效吗 更糟糕的是 mut T and mut T实际上编译并
  • 使计算属性依赖于 emberjs 中另一个对象的所有属性

    是否可以使一个属性依赖于另一个对象的所有属性 例如 也在jsfiddle中 http jsfiddle net xgZ94 2 html javascript App Em
  • Doctrine - 存储 ArrayCollection 键

    每当我将 ArrayCollection 与 Doctrine ORM 2 3 PHP gt 5 4 一起使用 并将对象值与集合中的键相关联时 例如当使用set方法 值被正确存储在数据库中 但是当我想从实体检索集合时 不会检索键 而是使用数
  • 如何使用 .NET Core 使用 UTC 时间验证 JWT

    目前我正在使用 JWT Bearer Authentication 编写 ASP NET Core WebApi 为了使 API 可以从不同时区访问 我使用以下模式来设置字段nbf 不是之前 和exp 过期 在我的 JWT 内到 UTC 时
  • 如何从 WPF 自动化 Microsoft Word 2003?

    我有一个 WPF 窗口 使用 C 作为后面的代码 其中有一些文本字段 我想要的是 当用户按下打印按钮时 我想获取这些字段上的信息并使用 Microsoft Word 2003 模板 该模板有一些空白字段 需要使用来自 WPF 窗口的这些信息
  • Spring拦截器中如何使用@ExceptionHandler?

    我正在使用 spring mvc 为客户端创建restful api 我有一个用于检查访问令牌的拦截器 public class AccessTokenInterceptor extends HandlerInterceptorAdapte
  • 如何检查矩阵中的每个值是否在R中其他两个矩阵中的对应值之间?

    我有一个矩阵 我想将其与其他两个矩阵进行比较 以查看矩阵中的每个条目是否包含在其他两个矩阵的值内或值之外 例如 如果我的矩阵是 gt M 1 2 3 1 0 1278982 0 4600544 1 3271033 2 0 1079272 1
  • 使用 Spring 在 Swagger UI 上收到 404 错误

    我正在将 swagger UI 与 Spring boot 应用程序集成 当我点击 swagger ui html 时 我收到 404 错误 我的配置类如下 Configuration EnableSwagger2 Import Swagg
  • 有条件地从列表中获取总和

    我有一个类属性详细信息 public class PropertyDetails public int Sequence get set public int Length get set public string Type get se
  • NightwatchJS 和 WebdriverIO 有什么区别?

    正如标题所述 Nightwatch js 和 Webdriver io 有什么区别 看起来它们具有相同的语法并且做几乎相同的事情 它们有何不同 我需要在他们之间做出选择 我已经多次使用这些工具编写了测试套件 Webdriver io 允许您
  • 出现错误 - 运行本机反应时无法识别的命令“run-android”,

    当尝试在我的模拟器上运行本机反应时 我收到此错误 react native run android 错误无法识别的命令 run android 我的模拟器已连接并且正在运行 有什么想法吗 包 json name iaapp version
  • 全屏意图不启动 Activity,但在 Android 10 上显示通知

    我尝试使用下一个代码启动广播接收器的活动 Intent i new Intent context AlarmNotification class i setFlags Intent FLAG ACTIVITY NEW TASK Intent
  • 如何调整轴以从 r 图中的零原点开始

    为了绘制三个变量 x1 x2 和 x3 的经验累积密度 我在 r 中使用了以下内容 plot ecdf x1 col blue main Distribution XYZ xlab x i ylab Prob x i lt y lines
  • 匹配点的正则表达式

    想知道最好的匹配方式是什么 test this from blah blah blah email protected cdn cgi l email protection blah blah 是 使用Python 我试过了re split
  • 如何获取Android系统颜色?

    我正在寻找获取 Android 系统颜色 设备中使用的颜色主题的方法 Using android color 我没有得到正确的颜色 例如 我的设备中的背景颜色是BLACK 菜单背景颜色为DARKGREY 值来自android color 在
  • 如何在代码中处理游标上的 IllegalStateException?

    当我调试我的应用程序时突然弹出此错误 我该如何处理这种错误 我不知道是在哪里以及如何引起的 Daemon System Thread lt 5 gt HeapWorker Suspended exception IllegalStateEx
  • Pytorch 中缺乏 L1 正则化的稀疏解决方案

    我正在尝试在简单神经网络的第一层 1 个隐藏层 上实现 L1 正则化 我查看了 StackOverflow 上的其他一些帖子 这些帖子使用 Pytorch 应用 l1 正则化来弄清楚应该如何完成 参考文献 在 PyTorch 中添加 L1