模型剪枝，不可忽视的推断效率提升方法

AlphaGo 使用了 1920 块 CPU 和 280 块 GPU，每场棋局光电费就需要 3000 美元。

• 剪枝
• 权重共享
• 低秩逼近
• 二值化网络（Binary Net）/三值化网络（Ternary Net）

Christopher A Walsh. Peter Huttenlocher (1931–2013). Nature, 502(7470):172–172, 2013.

[Lecun et al. NIPS 89] [Han et al. NIPS 15]

https://github.com/tensorflow/model-optimization/blob/master/tensorflow_model_optimization/g3doc/guide/pruning/pruning_with_keras.ipynb

```f = h5py.File("model_weights.h5",'r+')
for k in [.25, .50, .60, .70, .80, .90, .95, .97, .99]:
ranks = {}
for l in list(f[『model_weights』])[:-1]:
data = f[『model_weights』][l][l][『kernel:0』]
w = np.array(data)
ranks[l]=(rankdata(np.abs(w),method= 'dense')—1).astype(int).reshape(w.shape)
lower_bound_rank = np.ceil(np.max(ranks[l])*k).astype(int)
ranks[l][ranks[l]<=lower_bound_rank] = 0
ranks[l][ranks[l]>lower_bound_rank] = 1
w = w*ranks[l]
data[…] = w```

```f = h5py.File("model_weights.h5",'r+')
for k in [.25, .50, .60, .70, .80, .90, .95, .97, .99]:
ranks = {}
for l in list(f['model_weights'])[:-1]:
data = f['model_weights'][l][l]['kernel:0']
w = np.array(data)
norm = LA.norm(w,axis=0)
norm = np.tile(norm,(w.shape[0],1))
ranks[l] = (rankdata(norm,method='dense')—1).astype(int).reshape(norm.shape)
lower_bound_rank = np.ceil(np.max(ranks[l])*k).astype(int)
ranks[l][ranks[l]<=lower_bound_rank] = 0
ranks[l][ranks[l]>lower_bound_rank] = 1
w = w*ranks[l]
data[…] = w```

To prune, or not to prune: exploring the efficacy of pruning for model compression, Michael H. Zhu, Suyog Gupta, 2017（https://arxiv.org/pdf/1710.01878.pdf）

Learning to Prune Filters in Convolutional Neural Networks, Qiangui Huang et. al, 2018（https://arxiv.org/pdf/1801.07365.pdf）

Pruning deep neural networks to make them fast and small（https://jacobgil.github.io/deeplearning/pruning-deep-learning）

✄------------------------------------------------

0 条评论

• python pyqt5 载入gif

import sys from PyQt5.QtWidgets import QApplication, QLabel, QWidget from PyQt...

• 安装PyQt5以及Eric6的环境

index-url = https://pypi.tuna.tsinghua.edu.cn/simple

• Qt ListView 配合Model 显示文件与删除文件

表格、列表和树型窗口部件是 GUI 开发中经常会用到的窗口部件。这些窗口部件有两种不同的方式来获取数据。传统的方式是窗口部件本身包含用于存储数据的内置容器。这种...

• python pyqt5 窗体动画效果

import sys from PyQt5.QtWidgets import QApplication, QWidget from PyQt5.QtGui ...

• 关于使用Eric6和pyqt5，写一个四级联动的demo

选择下拉框以及label和按钮，还有一个tableview用来展示数据。设计完成后

• python pyqt5 椭圆形窗体

import sys from PyQt5.QtWidgets import QApplication, QWidget from PyQt5.QtGui ...

• APP 热修复都懂了，你会 SDK 热修复吗？最全方案在这里！

某日，解决完一个线上 bug 后，我冒出了一个念头：让我们的 SDK 也具有热修复的能力呗！

• 漫谈MySQL的锁机制

检查table_locks_waited和table_locks_immediate状态变量分析

• hello大皮——使用Qt访问Python Web服务 (使用Qt获取网页数据)

本次主要介绍一种Qt提供的访问Web URL的方法——QNetworkAccessManager。