深度学习模型压缩之模型量化

2023-07-03  本文已影响0人  小黄不头秃

我们在训练好了模型之后,在模型部署上线之前,我们通常会对模型进行优化。例如:我们的模型过大,使得模型无法部署到边缘设备上,我们需要对模型进行压缩,那么怎么对模型进行压缩和优化呢?

我们需要在减小模型大小的同时,尽可能的维持模型原有精度。

模型优化的方法:

一、模型量化

量化的路线与模型剪枝截然不同,剪枝是对不重要的神经元,卷积核等进行操作。量化更加简单粗暴,他直接将原本模型中的所有参数从原来的32位,减小成8位甚至是4位。简单来说,量化就是将训练好的网络的权重,激活值从高精度转化为低精度。

量化的优点

量化的对象

量化的位数:8位、16位
在pytorch的现在版本中,仅对CPU版本有量化的支持。

官方教程:(beta) Static Quantization with Eager Mode in PyTorch — PyTorch Tutorials 2.0.1+cu117 documentation

import os
import sys
import time
import numpy as np

import torch
import torch.nn as nn
from torch.utils.data import DataLoader

import torchvision
from torchvision import datasets
import torchvision.transforms as transforms

# Set up warnings
import warnings
warnings.filterwarnings(
    action='ignore',
    category=DeprecationWarning,
    module=r'.*'
)
warnings.filterwarnings(
    action='default',
    module=r'torch.ao.quantization'
)

# Specify random seed for repeatable results
torch.manual_seed(191009)

在forward函数中使用量化

pytorch中对一个张量进行量化。

import torch 

x = torch.randn(3,3)
xq = torch.quantize_per_tensor(x, scale=0.1, zero_point=8, dtype=torch.quint8)

注意:这里的uint8并不是说要将32位小数要转化为整数,仅代表位数。

量化还可以反量化,当然这里的反量化并不能还原成原来的值,仅仅是将数位进行拓展。

x = torch.dequantize(xq)
上一篇下一篇

猜你喜欢

热点阅读