提交 6e332d3f 编写于 作者: L Liufang Sang 提交者: whs

[PaddleSlim] add skip_quant test in doc (#3719)

上级 3082e40a
......@@ -44,6 +44,8 @@ class ResNet():
# TODO(wanghaoshuang@baidu.com):
# fix name("conv1") conflict between student and teacher in distillation.
#with fluid.name_scope('skip_quant'):
conv = self.conv_bn_layer(
input=input,
num_filters=64,
......@@ -51,8 +53,7 @@ class ResNet():
stride=2,
act='relu',
name=prefix_name + conv1_name)
with fluid.name_scope("skip_quant"):
conv = fluid.layers.pool2d(
conv = fluid.layers.pool2d(
input=conv,
pool_size=3,
pool_stride=2,
......
......@@ -159,6 +159,38 @@ python infer.py \
### PaddleLite预测
FP32模型可使用Paddle-Lite进行加载预测,可参见教程[Paddle-Lite如何加载运行量化模型](https://github.com/PaddlePaddle/Paddle-Lite/wiki/model_quantization)
## 如何进行部分量化
通过在定义op时指定 ``name_scope````skip_quant``可对这个op跳过量化。比如在<a href="../models/resnet.py">PaddleSlim/classification/models/resnet.py</a>中,将某个conv的定义作如下改变:
原定义:
```
conv = self.conv_bn_layer(
input=input,
num_filters=64,
filter_size=7,
stride=2,
act='relu',
name=prefix_name + conv1_name)
```
跳过量化时的定义:
```
with fluid.name_scope('skip_quant'):
conv = self.conv_bn_layer(
input=input,
num_filters=64,
filter_size=7,
stride=2,
act='relu',
name=prefix_name + conv1_name)
```
在脚本 <a href="./compress.py">PaddleSlim/classification/quantization/compress.py</a> 中,统计了``conv`` op的数量和以``fake_quantize``开头的量化op的数量,在对一些``conv`` op跳过之后,可发现以``fake_quantize``开头的量化op的数量变少。
## 示例结果
......
......@@ -99,6 +99,16 @@ def compress(args):
distiller_optimizer=None)
com_pass.config(args.config_file)
com_pass.run()
conv_op_num = 0
fake_quant_op_num = 0
for op in com_pass.context.eval_graph.ops():
if op._op.type == 'conv2d':
conv_op_num += 1
elif op._op.type.startswith('fake_quantize'):
fake_quant_op_num += 1
print('conv op num {}'.format(conv_op_num))
print('fake quant op num {}'.format(fake_quant_op_num))
def main():
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册