【发布时间】:2016-07-26 01:55:52
【问题描述】:
神经网络的一些用例要求并非所有神经元都连接在两个连续的层之间。对于我的神经网络架构,我需要有一个层,其中每个神经元只与前一层中的一些预先指定的神经元有连接(在有些随意的地方,而不是像卷积层这样的模式)。为了在特定图表上对数据进行建模,这是必需的。我需要在 Theano 中实现这个“稀疏”层,但我不习惯 Theano 的编程方式。
似乎在 Theano 中编程稀疏连接的最有效方法是使用theano.tensor.nnet.blocksparse.SparseBlockGemv。另一种方法是进行矩阵乘法,其中许多权重设置为 0(= 无连接),但与 SparseBlockGemv 相比效率非常低,因为每个神经元仅连接到前一层中的 2-6 个神经元约 100000 个神经元。此外,100000x100000 的权重矩阵不适合我的 RAM/GPU。因此,有人可以提供一个示例,说明如何使用SparseBlockGemv 方法或其他计算效率高的方法实现稀疏连接?
一个完美的例子是在隐藏层之后(并且在 softmax 之前)用一个额外的层扩展 MLP Theano Tutorial,其中每个神经元只与前一层中的一部分神经元有连接。但是,也非常欢迎其他示例!
编辑:请注意,该层必须在 Theano 中实现,因为它只是较大架构的一小部分。
【问题讨论】:
-
我开始意识到 SparseBlockGemv 并不适用于一般的稀疏块矩阵(例如 BSR),而是适用于只有有限输入/输出组合的大型 W 矩阵上的点运算。跨度>
标签: python machine-learning neural-network theano deep-learning