如何修剪神经网络中的神经元

时间:2018-04-27 04:47:48

标签: tensorflow machine-learning neural-network pytorch

上下文

假设我们有一个简单的3层前馈网络。第一个线性层的隐藏大小是100000,W1[input_size, 100000],它显然太大了,我想关闭一些选定的神经元。

预期结果

例如,在修剪选定的神经元之后,我们得到一个较小的网络,第一个线性层大小为500,这个较小的网络具有与大型网络相似的预测能力。

我的实施:

根据一些标准(在每次反向传播更新后应用于检查权重相似性的一些指标),我已经选择了一些我想要关闭的神经元索引,例如[1,7,8 ...]

我通过设置W1W1[:, 1, 7, 8 ...] = 0的相应权重归零,其中0是矩阵。这样做,它保证不会通过这些神经元传递信息。我是否也应该做一些关于反向传播的事情?除了反向传播,我可能还需要做什么?

由于我使用的是pytorch,如果你能用一些pytorch(其他框架,如tensorflow,Keras也很好)说明,那将会很棒。

0 个答案:

没有答案