【发布时间】:2021-08-30 23:48:27
【问题描述】:
我想在 Tensorflow 中实现剪枝算法。为了做到这一点,我不仅需要在修剪阶段掩盖权重,而且在随后的训练期间保持这个张量的一些条目冻结为零。
像我一样([0, 0] 和 [1, 1] 条目被屏蔽):
[[0 1.3 2], [1.34 0 2.3]]
在几批之后,我希望仍然有零
位置[0, 0] 和[1, 1]。
这里有一个解决方案How to stop gradient for some entry of a tensor in tensorflow。但似乎它仅适用于 TensorFlow v1,因为在调用 fit 方法后更新了变量的屏蔽条目。
可以创建 Optimizer 的特殊类,该类将重新定义 apply_gradients 方法,其中梯度将在每次反向传递后乘以掩码,但这种解决方案似乎相当不方便,并且重新定义了多个优化器- Adam,RMSProp,随便。
【问题讨论】:
-
@NVSAbhilash 它是一个不同问题的解决方案 - 沿图中的某个路径冻结反向传递。在我的例子中,梯度通过张量传播,但仅适用于
mask=1
标签: python tensorflow