【问题标题】:Caffe- How to remove unwanted connections from an trained caffe model?Caffe-如何从训练有素的 caffe 模型中删除不需要的连接?
【发布时间】:2017-03-16 17:14:37
【问题描述】:

我已经训练了一个 fastcnn 模型来使用 caffe 检测图像中的人脸。我当前的模型大小是 530MB。我想缩小我的模型尺寸,所以我遇到了宋涵的Deep Compression

我使用 Pycaffe 在我的模型中将不太重要的权重更新为 0。现在模型大小并没有减小,如何从训练好的caffe模型中去掉那些无关紧要的连接,从而减小模型的大小?

【问题讨论】:

    标签: neural-network deep-learning caffe pycaffe


    【解决方案1】:

    由于 caffe 中的 Blob 数据类型(数值数组的基本“容器”)不支持“稀疏”表示,用零替换权重不会改变存储复杂性:caffe 仍然需要空间来存储这些零。这就是为什么您没有看到模型尺寸减小的原因。

    为了修剪连接,您必须确保零遵循特定模式:例如,"InnerProduct" 的整行为零 - 您可以消除前一层的一个维度,等等。

    可以使用网络手术仔细手动进行这些修改。阅读更多相关信息here(此示例实际上是关于添加连接,但您可以应用相同的步骤来修剪连接)。

    您可能会发现SVD "trick" 对于降低模型复杂性很有用。

    【讨论】:

    • 有什么方法可以将权重的 dtype 从“float32”更改为“float16”,从而减小模型尺寸?
    【解决方案2】:

    @Shai 's answer 很好地解释了为什么您的模型尺寸没有减小。

    作为补充,为了使权重更稀疏以获得模型大小的压缩,您可以尝试caffe for Structurally Sparse Deep Neural Networks

    它的主要思想是在损失函数中添加一些正则化器,它们实际上是由rowcolumnchannel 等分组的权重的L2-norms(假设来自层的权重具有形状(num_out, channel, row, column))。在训练过程中,这些正则化器可以使同一组内的权重均匀衰减,从而使权重变得更加稀疏,更容易消除整行或整列甚至整个通道的权重。

    【讨论】:

    • 您确定这是L2 群组标准吗?通常L1 norm 鼓励稀疏...是L2 norm of L1 norm of columns(又名“混合范数”)吗?
    • @Shai 这是一个L2 规范,即该论文中的Group Lasso 正则化器(arxiv.org/pdf/1608.03665v4.pdf)。它与损失中的L1 norm(重量衰减)结合使用。
    • 谢谢!确实,通过正确使用正则化,您可以获得非常有趣的效果。感谢您提供有趣的参考。
    • @Shai 同意你的看法。 :)
    【解决方案3】:

    看看Channel PruningICCV 2017,这是一种优雅的算法,可以有效地修剪每一层的通道。在其github code 中,有一个剪枝过程用于去除不必要的神经元,这有助于减小模型大小并加速预测。

    【讨论】:

      猜你喜欢
      • 2015-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-07
      • 2015-07-27
      • 1970-01-01
      • 2017-07-09
      相关资源
      最近更新 更多