使用SVD压缩CNN全连接层-caffe实现


SVD是在机器学习领域广泛应用的算法,它不光可以用于降维算法中的特征分解,还可以用于推荐系统,以及自然语言处理等领域。本篇博客将介绍如何使用SVD对深度模型中全连接层(fully-connected layer)进行压缩。此外,我将以cifar10为例,用caffe进行实现。

一. SVD(奇异值分解)的原理

SVD的原理在网上能找到很多资料,这里不再赘述。推荐一篇博客: link.

二. 用SVD压缩深度模型中的全连接层

以cifar10为例,打开caffe/examples/cifar10/cifar10_quick_train_test.prototxt,可以看到最后两个全连接层ip1和ip2

layer {
  name: "ip1"
  type: "InnerProduct"
  bottom: "pool3"
  top: "ip1"
  param {
    lr_mult: 1
  }
  param {
    lr_mult: 2
  }
  inner_product_param {
    num_output: 64
    weight_filler {
      type: "gaussian"
      std: 0.1
    }
    bias_filler {
      type: "constant"
    }
  }
}
layer {
  name: "ip2"
  type: "InnerProduct"
  bottom: "ip1"
  top: "ip2"
  param {
    lr_mult: 1
  }
  param {
    lr_mult: 2
  }
  inner_product_param {
    num_output: 10
    weight_filler {
      type: "gaussian"
      std: 0.1
    }
    bias_filler {
      type: "constant"
    }
  }
}

根据ip1和ip2的num_output,我们可以看出,ip1有64个神经元,ip2有10个神经元。也就是说在ip2这一层的权重矩阵W,其shape为(10, 64),根据SVD公式,
在这里插入图片描述式子来自此博客link.
我们可以对权重矩阵W进行奇异值分解。代码如下:

import numpy as np
#假设此时W已经从模型提取出来了
U, s, V = np.linalg.svd(W)
print("U.shape:{}".format(U.shape),
      "s.shape:{}".format(s.shape),
      "V.shape:{}".format(V.shape
  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
SVD(Singular Value Decomposition,奇异值分解)分解加速全连接层的计算指的是一种优化方法,用于减少全连接层的计算量和参数数量,从而提高计算效率和模型的训练速度。 在深度学习中,全连接层通常是指将前一层的输出与当前层的每个神经元都连接起来的层。全连接层的参数数量很大,对于大规模的网络,全连接层的计算和存储开销非常高。 为了减少全连接层的计算量,可以使用SVD分解对全连接层的权重矩阵进行近似表示。SVD分解将一个矩阵分解为三个矩阵的乘积:U、S和V。其中,U和V是正交矩阵,S是对角矩阵,对角线上的元素称为奇异值。通过保留奇异值较大的部分,可以近似地表示原始权重矩阵。 具体来说,在SVD分解中,可以将全连接层的权重矩阵表示为 U * S * V^T 的形式,其中 U 和 V 是正交矩阵,S 是对角矩阵。通过保留 S 中奇异值较大的部分,并截断 U 和 V 的列数,可以减少全连接层的计算量和参数数量。 这种方法的优势在于,通过SVD分解,可以获得一个较低秩的近似权重矩阵,从而减少计算量和存储开销。同时,减少参数数量还有助于缓解过拟合问题,并提高模型的泛化能力。 总之,SVD分解加速全连接层的计算是一种通过对权重矩阵进行近似表示来减少计算量和参数数量的优化方法。通过保留奇异值较大的部分,并截断正交矩阵的列数,可以有效地提高计算效率和模型的训练速度。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值