【发布时间】:2021-08-10 11:01:51
【问题描述】:
我有一个 TensorFlow 模型,我可以在其中将 pruner.prune_low_magnitude 层应用于我的 Dense 层的输出。这似乎按照说明工作,我得到几乎相同的结果,直到 95% 的稀疏度。 GPU 和 CPU 的处理时间似乎相同。修剪层似乎正在计算所有权重,然后将最小的权重设置为零以适应稀疏图。是这样吗?
当然,加快速度会很好,但就我目前的目的而言,这很好。
我想修剪权重,然后让它们保持为零。我会修剪一些重量;然后继续训练,让模型从剪枝中恢复;然后再修剪一下。我觉得这应该更接近真正的神经元所做的。有没有办法做到这一点?
我的解决方案(目前还不行)是添加一个自定义层,Trainable=false。这有一个掩码数组,从全1开始,如果相应的权重为零,则设置为零。该层将权重乘以这个掩码数组,因此一旦权重变为零,它将保持为零。这应该工作吗?有没有更好的办法?
【问题讨论】:
标签: tensorflow layer tf.keras