稀疏训练

什么是稀疏训练,看下面的流程。

 说白了,就是删除cnn中weight,某个面中不要的值。如何取这个阈值呢?一般都是方差作为标准。也有把负值设为0的。这里感觉像什么?激活函数吧。

也是剪枝的一种,不同于通道剪枝,会加速运算。只是提高准确率性。

参考

http://www.xjishu.com/zhuanli/55/201710473955.html

Yolov5是一种目标检测算法,稀疏训练是一种优化模型大小和推理速度的方法。下面是yolov5稀疏训练的步骤和代码示例: 1. 安装依赖库sparseml和wandb: ```shell pip install sparseml wandb ``` 2. 导入依赖库和模型: ```python import torch from torch.utils.data import DataLoader from torchvision import datasets, transforms from sparseml.pytorch.models import ModelRegistry, yolo_v5s from sparseml.pytorch.utils import DataLoaderIterator, ModuleExporterPyTorch, PyTorchModule ``` 3. 加载数据集: ```python transform = transforms.Compose([ transforms.Resize((640, 640)), transforms.ToTensor(), transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5)) ]) train_dataset = datasets.CocoDetection( '/path/to/coco/train2017', '/path/to/coco/annotations/instances_train2017.json', transform=transform ) train_loader = DataLoader(train_dataset, batch_size=16, shuffle=True) ``` 4. 加载模型: ```python model = ModelRegistry.create('yolov5s') ``` 5. 定义稀疏训练参数: ```python sparsity_params = { 'start_epoch': 0, 'end_epoch': 50, 'target_sparsity': 0.5, 'sparsity_function': 'exponential', 'sparsity_function_params': { 'initial_sparsity': 0.0, 'final_sparsity': 0.5, 'sparsity_half_life': 10, }, 'op_types': ['Conv2d'], 'op_names': ['model.0.conv.conv', 'model.1.conv.conv', 'model.2.conv.conv'], 'importance': 'layer', 'magnitude_sparsity': False, 'params': { 'weight': { 'schedule': 'polynomial', 'power': 1, 'initial_sparsity': 0.0, 'final_sparsity': 0.5, }, 'bias': { 'schedule': 'constant', 'initial_sparsity': 0.0, 'final_sparsity': 0.0, }, }, } ``` 6. 进行稀疏训练: ```python for epoch in range(50): model.train() train_loss = 0 for batch_idx, (data, target) in enumerate(train_loader): optimizer.zero_grad() output = model(data) loss = compute_loss(output, target) loss.backward() optimizer.step() train_loss += loss.item() # apply sparsity if epoch >= sparsity_params['start_epoch'] and epoch <= sparsity_params['end_epoch']: sparsity_level = sparsity_params['sparsity_function_params']['initial_sparsity'] + \ (sparsity_params['sparsity_function_params']['final_sparsity'] - sparsity_params['sparsity_function_params']['initial_sparsity']) * \ (1 - (epoch - sparsity_params['start_epoch']) / (sparsity_params['end_epoch'] - sparsity_params['start_epoch'])) model.apply_sparsity(sparsity_level, sparsity_params) ``` 7. 导出稀疏模型: ```python exporter = ModuleExporterPyTorch(model, PyTorchModule) exporter.export('sparse_yolov5s.pt') ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

颐水风华

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值