修剪和训练 - 这些在 Tensorflow 中如何协同工作?

我正在尝试修剪 Tensorflow 模型。我的特定模型是一堆 inception 模块,在 TensorFlow 2.5 on Line 和 MacOS 上运行。它现在不起作用,可能是由于我现在会发现的一些愚蠢行为。但是,如果我能理解 tf.keras 实现背后的基本思想,那对我来说会更容易。

许多人使用剪枝来使模型更小、更高效。他们开发一个模型,保存它,然后在不损坏它的情况下进行第二次缩小,这样它就可以在手机上运行,​​或者其他东西。您从程序的保存版本开始,打开剪枝,看看是否可以得到一个剪枝模型,以较少的处理提供相同的结果。我想做一些更复杂的事情 - 我想修剪模型,然后继续训练。我有一个相当稠密的模型,我认为如果我能做得更稀疏一点,误差的反向传播可能会更好。

我知道修剪工具正在开发中,高级用户可能可以让他们做各种各样的事情,但是如果有人可以对以下适合于最卑鄙的理解。谢谢。

当你修剪一个节点时,它还能回来吗?

我想除非您恢复到模型的早期版本,否则修剪过的节点已经消失了。但是,如果进一步的训练改变了节点的大小,则有可能一个人回来而其他人取而代之。或者您可以定义一个修剪计划,其中最终稀疏度低于初始稀疏度? SaveModel 格式确实缓存了很多东西,所以节点可以回来。但如果他们不这样做可能会更容易。

当您将图层标记为可修剪时,它是否可以再次不可修剪?

apply_pruning_filter(layer) 示例表明这是一个单向过程。但是是吗?假设我已经修剪了模型的最后一层,然后想要修剪较早的层,这可以做到吗?如果有一个通用的回调示例,它会显式设置要修剪哪些层以及稀疏值是多少,即使这不是最简洁的方法,那就太好了。

如果可修剪层发生变化,我们如何计算新的稀疏度?

如果我可以(例如)分别修剪两组图层,这将不是问题。但是如果我只能修剪集合A或者集合A+B,加上集合B就意味着可修剪节点的数量增加了,不容易知道要求什么稀疏度。或者有其他方法吗?

laoshu8688 回答:修剪和训练 - 这些在 Tensorflow 中如何协同工作?

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/27056.html

大家都在问