代码拉取完成,页面将自动刷新
同步操作将从 PaddlePaddle/PaddleSlim 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
该教程以图像分类模型MobileNetV1为例,说明如何快速使用PaddleSlim的卷积通道剪裁接口。 该示例包含以下步骤:
以下章节依次次介绍每个步骤的内容。
请确认已正确安装Paddle,版本依赖关系可见PaddleSlim Rep主页。然后按以下方式导入Paddle和PaddleSlim:
import paddle
import paddle.vision.models as models
from paddle.static import InputSpec as Input
from paddle.vision.datasets import Cifar10
import paddle.vision.transforms as T
from paddleslim.dygraph import L1NormFilterPruner
该章节构造一个用于对CIFAR10数据进行分类的分类模型,选用MobileNetV1
,并将输入大小设置为[3, 32, 32]
,输出类别数为10。
为了方便展示示例,我们使用Paddle提供的预定义分类模型和高层API,执行以下代码构建分类模型:
net = models.mobilenet_v1(pretrained=False, scale=1.0, num_classes=10)
inputs = [Input([None, 3, 32, 32], 'float32', name='image')]
labels = [Input([None, 1], 'int64', name='label')]
optimizer = paddle.optimizer.Momentum(
learning_rate=0.1,
parameters=net.parameters())
model = paddle.Model(net, inputs, labels)
model.prepare(
optimizer,
paddle.nn.CrossEntropyLoss(),
paddle.metric.Accuracy(topk=(1, 5)))
transform = T.Compose([
T.Transpose(),
T.Normalize([127.5], [127.5])
])
val_dataset = Cifar10(mode='test', transform=transform)
train_dataset = Cifar10(mode='train', transform=transform)
对模型进行预训练,为之后的裁剪做准备。 执行以下代码对模型进行预训练
model.fit(train_dataset, epochs=2, batch_size=128, verbose=1)
FLOPs = paddle.flops(net, input_size=[1, 3, 32, 32], print_detail=True)
对网络模型两个不同的网络层按照参数名分别进行比例为50%,60%的裁剪。 代码如下所示:
pruner = L1NormFilterPruner(net, [1, 3, 32, 32])
pruner.prune_vars({'conv2d_22.w_0':0.5, 'conv2d_20.w_0':0.6}, axis=0)
以上操作会按照网络结构中不同网路层的冗余程度对网络层进行不同程度的裁剪并修改网络模型结构。
FLOPs = paddle.flops(net, input_size=[1, 3, 32, 32], print_detail=True)
对模型进行裁剪会导致模型精度有一定程度下降。 以下代码评估裁剪后模型的精度:
model.evaluate(val_dataset, batch_size=128, verbose=1)
对模型进行finetune会有助于模型恢复原有精度。
以下代码对裁剪过后的模型进行评估后执行了一个epoch
的微调,再对微调过后的模型重新进行评估:
model.fit(train_dataset, epochs=1, batch_size=128, verbose=1)
model.evaluate(val_dataset, batch_size=128, verbose=1)
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。