SqueezeNet是一种超轻量级的网络,它的分类精度接近AlexNet,但是模型却比其小50倍。
SqueezeNet的基础模块叫fire,如下图
squeeze和expand分别压缩和扩展数据的通道数,我的理解是可能相当于形态学的腐蚀和膨胀。
可以看出此网络也是通过1*1卷积层进行降维从而减少参数
网络分为10层:
第1层卷积,第2-9层为fire层,在1、4、8之后又max pooling,第10层又是卷积,最后平均池化加softmax获取得分。
全卷积,无全连接层
最后一层提供了全图求平均操作,可以接受任意尺寸的输入
参数压缩
使用了Deep Compression的参数压缩办法,有裁剪,量化,编码三个手段。
裁剪
把网络中所有绝对值小于门限的参数置0;非零参数再次训练进行优化。
记录非零参数值和其在数组中的下标,把下标表示成差分形式。
用数组存储稀疏矩阵,占用空间更小。进行梯度计算的时候只需要查询数组中的元素就行了。
量化
用K均值把所有参数聚成2n个类
保持同一聚类内参数相等,对网络进行调优。在梯度下降时,归于同一类的节点的梯度相加,施加到该类的聚类中心上
使用n比特编码的聚类中心替代原有参数
原矩阵被替换成了下标矩阵,存储各个数据的类下标,另外划出一个数组存储其均值,这样减少了浮点数。
编码
使用Huffman编码存储编码为n位的非零数据取值和编码为4位的非零元素下标
参数规划
- 参数组合过多,使用超参数:
- 首个fire模块中包含base个3×3核;
- 每隔freq个fire模块,3×3模块增加incre个。
- expand部分中,3×3核占expand中核总数比例为pct。
- squeeze中核数与expand中核数比例为sr。
前后参数之间设定关系来减少调参。