Tensorflow 如何修剪神经网络中的神经元
上下文: 假设我们有一个简单的三层前馈网络。第一个线性层的隐藏大小为100000--Tensorflow 如何修剪神经网络中的神经元,tensorflow,machine-learning,neural-network,pytorch,Tensorflow,Machine Learning,Neural Network,Pytorch,上下文: 假设我们有一个简单的三层前馈网络。第一个线性层的隐藏大小为100000--W1[input_size,100000],其中input_size是一个比100000小得多的数字。有些神经元不会学习任何东西。我想用剪枝来选择和关闭这些神经元 预期结果 在修剪选定的神经元后,我们将拥有一个更小的网络,第一层的神经元更少,比如说减少到500个。这个较小的网络的预测能力与较大的网络相同 我的实现: 根据一些标准(每次反向传播更新后用于检查权重相似性的一些指标),我愉快地选择了我想要关闭的神经元的
W1[input_size,100000]
,其中input_size
是一个比100000
小得多的数字。有些神经元不会学习任何东西。我想用剪枝来选择和关闭这些神经元
预期结果
在修剪选定的神经元后,我们将拥有一个更小的网络,第一层的神经元更少,比如说减少到500个。这个较小的网络的预测能力与较大的网络相同
我的实现:
根据一些标准(每次反向传播更新后用于检查权重相似性的一些指标),我愉快地选择了我想要关闭的神经元的索引,例如,[1,7,8…]
将W1
,W1[:,1,7,8…]=0
中的索引表示的权重归零。这样就不会有信息通过这些神经元传递到下一层
够了吗?我是否也应该手动干预反向传播?归零神经元只停止向前传递的计算,但对于权重的学习/更新,反向传播更为重要。由于我使用的是pytorch
,如果在pytorch
中提供了插图就太好了,其他框架如tensorflow、Keras也不错