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

Tensorflow 如何修剪神经网络中的神经元,tensorflow,machine-learning,neural-network,pytorch,Tensorflow,Machine Learning,Neural Network,Pytorch,上下文: 假设我们有一个简单的三层前馈网络。第一个线性层的隐藏大小为100000--W1[input_size,100000],其中input_size是一个比100000小得多的数字。有些神经元不会学习任何东西。我想用剪枝来选择和关闭这些神经元 预期结果 在修剪选定的神经元后,我们将拥有一个更小的网络,第一层的神经元更少,比如说减少到500个。这个较小的网络的预测能力与较大的网络相同 我的实现: 根据一些标准(每次反向传播更新后用于检查权重相似性的一些指标),我愉快地选择了我想要关闭的神经元的

上下文:

假设我们有一个简单的三层前馈网络。第一个线性层的隐藏大小为100000--
W1[input_size,100000]
,其中
input_size
是一个比
100000
小得多的数字。有些神经元不会学习任何东西。我想用剪枝来选择和关闭这些神经元

预期结果

在修剪选定的神经元后,我们将拥有一个更小的网络,第一层的神经元更少,比如说减少到500个。这个较小的网络的预测能力与较大的网络相同

我的实现:

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

W1
W1[:,1,7,8…]=0
中的索引表示的权重归零。这样就不会有信息通过这些神经元传递到下一层

够了吗?我是否也应该手动干预反向传播?归零神经元只停止向前传递的计算,但对于权重的学习/更新,反向传播更为重要。由于我使用的是
pytorch
,如果在
pytorch
中提供了插图就太好了,其他框架如tensorflow、Keras也不错