用于创建稀疏线性层的Pythorch扩展库

sparselinear的Python项目详细描述


稀疏的

SparseLinear是一个Pythorch包,它允许用户高效地创建非常宽和稀疏的线性层。稀疏连接网络是指每个节点都连接到可用节点的一小部分的网络。这与完全连接的网络不同,一层中的每个节点都连接到下一层中的每个节点。在

提供的层和动态激活稀疏模块兼容反向传播。稀疏线性层以稀疏性初始化,支持非结构化稀疏性,并允许动态增长和修剪。我们通过在PyTorch Sparse上构建一个线性层来实现这一点,该层在PyTorch中提供了优化的稀疏矩阵操作和自动加载支持。在

目录

更多关于稀疏线

默认参数使用随机连接初始化稀疏线性层,该层将线性转换应用于传入数据

参数

  • in_features-每个输入样本的大小
  • out_features-每个输出样本的大小
  • bias-如果设置为False,层将不会学习加性偏差。默认值:True
  • sparsity-权矩阵的稀疏性。默认值:0.9
  • connectivity—用户定义的稀疏矩阵。默认值:None
  • small_world-生成小世界稀疏性的布尔标志。默认值:False
  • dynamic-布尔标志,用于动态更改网络结构。默认值:False
  • deltaT-增长和修剪更新步骤的频率。默认值:6000
  • Tend—增长和修剪算法更新步骤的停止时间。默认值:150000
  • alpha-f余弦更新的衰变参数。默认值:0.1
  • max_size-发生分块之前允许的最大条目数。默认值:1e8

形状

  • 输入:(N, *, H_{in}),其中*表示任何数量的附加维度,H_{in} = in_features
  • 输出:(N, *, H_{out})其中除了最后一个维度外,所有维度都与输入和H_{out} = out_features相同

变量

  • ~稀疏线性重量-形(out_features, in_features)模的可学习权重。值从初始化,其中
  • ~稀疏线性偏差-形(out_features)模的可学习偏差。如果biasTrue,则值从哪里初始化

示例:

>>>m=nn.SparseLinear(20,30)>>>input=torch.randn(128,20)>>>output=m(input)>>>print(output.size())torch.Size([128,30])

以下自定义也可以使用适当的参数完成-

用户定义的稀疏性

可以选择添加自定义静态稀疏度。{nonensor>表示第20层的元素。在

小世界稀疏性

默认的静态稀疏度是随机的。有了这面旗帜,人们可以使用小世界稀疏性。见here。若要指定,请将small_world设置为True。具体地说,我们使连接变得遥不可及,以确保小世界的行为。在

动态增长和剪枝算法

用户可以在训练期间使用此功能从稀疏配置开始增长和修剪单元。该实现基于Rigging the lottery算法。将dynamic指定为True,以便在训练时动态更改层连接。在

动态激活稀疏性

此外,我们提供了一个动态激活稀疏模块,以利用原则性的每层激活稀疏性。算法实现基于K-Winners strategy。在

参数

  • alpha-更新占空比时使用的常量。默认值:0.1
  • beta-提升前一个占空比中未激活的神经元因子。默认值:1.5
  • act_sparity-用于计算K for K-Winners策略的输入分数。默认值:0.65

形状

  • 输入:(N, *),其中*表示任何数量的附加维度
  • 输出:(N, *),与输入形状相同

示例:

^{pr2}$

安装

  • 按照安装说明,从here安装Pytorch稀疏包。在
  • 然后运行pip install sparselinear

入门

我们在this存储库中提供了一个Jupyter笔记本,它演示了稀疏线性层的基本功能。我们还展示了使用这个包的附加功能来训练各种模型的步骤。在

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java JavaFX SwingWorker等价物?   java如何检查一个字符串只包含数字和一个小数点?   java遇到了异常组织。阿帕奇。卡塔琳娜。LifecycleException:无法启动组件   java如何从日期格式获取最低计时单位?   java应用服务器与开发过程的集成   java我无法运行Junit测试   无法在java多线程处理中维护生产者任务的顺序   java如何在CLI应用程序中“拦截”Ctrl+C?   java如何使用JSch进行原子SFTP文件传输,以便在写入过程完成之前无法访问该文件?   java当用户摆弄html范围滑块时,如何更改内容(文本)?   如何在Java中向现有文件追加文本?   JUnit测试中的java模拟Apache驼峰位置   java Maven更新项目和依赖项