用于创建稀疏线性层的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)
模的可学习偏差。如果bias
是True
,则值从哪里初始化
示例:
>>>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笔记本,它演示了稀疏线性层的基本功能。我们还展示了使用这个包的附加功能来训练各种模型的步骤。在
- 项目
标签: