Caffe-如何从训练有素的caffe模型中删除不需要的连接?

时间:2016-11-03 07:37:32

标签: neural-network deep-learning caffe pycaffe

我已经训练了一个fastcnn模型来使用caffe检测图像中的人脸。我目前的型号是530MB。我想缩小模型的大小,所以我来到了{Han}的Deep Compression

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

3 个答案:

答案 0 :(得分:4)

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

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

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

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

答案 1 :(得分:3)

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

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

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

答案 2 :(得分:0)

查看Channel Pruning ICCV 2017 ,这是一种优雅的算法,可以有效地修剪每一层的频道。在其github code中,有一个删除不必要的神经元的修剪过程,这有助于减少模型大小和加速预测。