如何计算环形复杂度_如何计算神经网络模型的复杂度

神经网络的复杂度通常由参数量(Params)和计算量(FLOPs, MAC, MACC)衡量。Params表示模型参数数量,FLOPs、MAC和MACC则反映模型的计算需求。PyTorch中,可以利用torchsummary库方便地统计网络结构和参数数量。" 127416190,10422015,STM32中断与DMA通信实践:LED控制与串口交互,"['stm32', '单片机', 'ARM', '中断编程', 'DMA通信']
摘要由CSDN通过智能技术生成

ad7a16776ad29ef767e4ae4fa567a838.png

通常,一个神经网络模型的复杂度用2个指标来描述,其一是模型的参数(Parameters)数量,其二是模型的计算量[1]。具体概念的含义如下:

1. Params:模型的参数量

2. FLOPs:FLoating point OPerations,前向推理的计算量

3. MAC:Memory Access Cost。

4. MACC(MADD):multiply-accumulate operations:先乘起来再加起来的运算次数。

第一个参数Params评估神经网络模型参数量,后面3个用于评估模型的计算量。

即:

1. 计算量/FLOPS(时间复杂度)即模型的运算次数

2. 访存量/Bytes(空间复杂度)即模型的参数数量

具体计算方法见[2]

我使用的深度学习框架是PyTorch。PyTorch的参数统计与网络结构可使用torchsummary来统计,非常方便[1]

import torch
import torch.nn as nn
import torchsummary
from torch.nn import init


class BaseNet(nn.Module):
    def __init__(self):
        super(BaseNet,self).__init__()
        self.conv1=nn.Conv2d(in_channels=1,out_channels=1,kernel_size=3,stride=1,padding=1,bias=False)
        self.conv2=nn.Conv2d(in_channels=1,out_channels=1,kernel_size=3,stride=1,padding=1,bias=False)

        for m in self.modules():
            if isinstance(m, nn.Conv2d):
                nn.init.kaiming_uniform_(m.weight.data)
                if m.bias is not None:
                    m.bias.data.zero_()
            elif isinstance(m, nn.BatchNorm2d):
                init.normal_(m.weight.data, 1.0, 0.02)
                init.constant_(m.bias.data, 0.0)
    def forward(self,x):
        x=self.conv1(x)
        out_map=self.conv2(x)
        return out_map
    
def count_parameters(model):
    return sum(p.numel() for p in model.parameters() if p.requires_grad)




model = BaseNet()

torchsummary.summary(model.cuda(), (1, 512, 512))
print('parameters_count:', count_parameters(model))

Output:

----------------------------------------------------------------
        Layer (type)               Output Shape         Param #
================================================================
            Conv2d-1          [-1, 1, 512, 512]               9
            Conv2d-2          [-1, 1, 512, 512]               9
================================================================
Total params: 18
Trainable params: 18
Non-trainable params: 0
----------------------------------------------------------------
Input size (MB): 1.00
Forward/backward pass size (MB): 4.00
Params size (MB): 0.00
Estimated Total Size (MB): 5.00
----------------------------------------------------------------
parameters_count: 18

参考文献:

[1]爽朗:PyTorch几种情况下的参数数量统计

[2]科技猛兽:衡量模型复杂度的指标解读

参考

  1. ^abchttps://zhuanlan.zhihu.com/p/64425750
  2. ^abhttps://zhuanlan.zhihu.com/p/266275736
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值