前馈网络张量流或pytorch中的稀疏连接?

数据挖掘 神经网络 深度学习 张量流 火炬
2022-03-03 22:25:54

我想在 Pytorch 和 Tensorflow 中创建稀疏前馈网络,也就是说,每个节点只连接到下一层的 k 个神经元,其中 k 严格小于下一层的节点总数。但是到目前为止我看到的所有教程/示例都是针对完全连接的前馈网络的。有没有办法在这些工具中构建这样的稀疏网络?

4个回答

您需要特定的边缘还是只需要一个不变的稀疏级别?我知道 Keras 允许您将随机种子传递给 dropout 层。如果我正确理解您的需求,您可以设置丢失百分比以获得所需的稀疏度,然后将随机种子设置为始终相同,以便层始终丢弃(并保持)相同的连接。

教程可能是使用 tensorflow 的方法。树结构导致层之间的稀疏性,并且它是明确编程的。卷积层和全连接层都被使用。作者分享了完整代码的链接。

同意法迪。它只是效率不高。您必须将输入和权重张量拆分为 tensor.size()/k 块,然后对每对块执行单独的 mult,add 操作。即使您有一个高效的索引方案,可以一次性将块连接到 mul-add,您也必须将输出取消索引到一个平面批处理张量。

需要考虑的一些事情是pathnet - pytorch这个(如果你感兴趣的话,我在某个地方有一个半工作的实现),但两者都是你正在谈论的高效版本的变体,这是某种形式的路由。

我们在前馈中不使用稀疏连接来利用有效的矩阵乘积运算。
但是,如果您想对该方面进行建模,请参阅dropout