深度学习模型/算法的运算复杂度分析

本文深入探讨了深度学习模型如ResNet-50和YOLOV3在不同场景下的资源消耗,包括空间占用、内存占用、运行速度及耗电情况。以ResNet-50为例,分析了模型参数、中间变量及mini-batch训练对内存的影响。
部署运行你感兴趣的模型镜像

分四大部份:
 

  • 空间占用——单个模型的参数文件要占用多大空间
  • 内存占用——运行在手机或平板上时需要占用多大的 RAM
  • 运行速度——尤其考虑实时的视频和大图像处理情形
     
  • 耗电情况

Ref:

原文: http://machinethink.net/blog/how-fast-is-my-model/

翻译:https://blog.youkuaiyun.com/leayc/article/details/81001801


影响内存占用的主要因素:ResNet-50为例 network architecture图

输入image数据

256*256的彩色图像:256*256*3*1 byte= 192KB

模型自身conv.等使用到的Params参数

ResNet-50有26 million参数,占内存:26M * 32 bit = 99MB

模型里各layer计算产生的中间变量(memory), 也就是输入图像在计算时每一层产生的输入和输出feature map

ResNet-50有16 million响应 (没推衍怎么算的),占内存:16M*32bit = 64MB

做mini-batch训练时batch size的影响

ResNet-50,mini-batch=16,各层相应占内存:64MB*16= 1GB

BP算法: 如果用BP算法(back propagation)时中间变量部份还要*2 ~~!!!

所以一张256*256彩色影像做FP的inference时=192KB+99MB+64MB就还好,训练时加上batch因素就瞬间变内存怪兽爆掉

Ref:

https://blog.youkuaiyun.com/shenxiaolu1984/article/details/71522141/

https://blog.youkuaiyun.com/wz22881916/article/details/81054036


YOLO V3 中间层变量分析,这要推导出中间变量占用内存有点难..........
https://blog.youkuaiyun.com/dz4543/article/details/90049377

您可能感兴趣的与本文相关的镜像

Yolo-v5

Yolo-v5

Yolo

YOLO(You Only Look Once)是一种流行的物体检测和图像分割模型,由华盛顿大学的Joseph Redmon 和Ali Farhadi 开发。 YOLO 于2015 年推出,因其高速和高精度而广受欢迎

### 如何评估算法模型的时间复杂度与空间复杂度 #### 时间复杂度的定义与计算方法 时间复杂度是用来描述算法执行时间随输入规模变化的增长趋势的一种方式。通常情况下,可以通过分析算法中最基本操作的数量来估算其时间复杂度[^1]。对于一个给定的算法,其时间复杂度可以用大O符号表示,该符号仅保留表达式的最高阶项并忽略常数因子[^5]。 以下是几种常见的时间复杂度及其含义: - **O(1)**:无论输入大小如何,算法始终以固定步数完成。 - **O(n)**:随着输入规模线性增加,运算次数也随之线性增长。 - **O(log n)**:每一步减少一定比例的数据处理量,典型例子是对分查找。 - **O(n log n)**:常见的高效排序算法(如快速排序、归并排序)具有这样的复杂度。 - **O(n²)**:嵌套循环结构常常导致平方级别的复杂度。 具体来说,在实际应用中还需要考虑不同场景下的表现差异,比如最好情况、最坏情况以及平均情况下的时间消耗。 #### 空间复杂度的概念及测量手段 除了运行效率外,另一个重要的考量因素就是内占用状况——即所谓的“空间复杂度”。它反映了程序运行期间额外所需的临时储资源数量[^3]。一般而言,当提到某个特定实现的空间需求时,我们会关注除原始输入之外新增加的部分;例如递归调用栈深度或者动态分配数组长度等等[^4]。 同样地,也可以利用类似的渐近记号体系来刻画这种特性,并遵循相同的简化原则去除无关紧要的小项或乘积系数。 值得注意的是,在现代计算机环境中由于硬盘容量日益增大且成本降低的缘故,相较于过去更加倾向于优先优化速度而容忍较大的内开销。然而这并不意味着可以完全忽视后者的影响,特别是在移动设备或其他受限平台上开发软件的时候仍需谨慎对待两者间的权衡取舍问题。 ```python def example_function(n): array = [0] * n # 额外创建了一个长度为n的列表 -> O(n) 的空间复杂度 total = sum(array) # 计算总和的操作不会显著影响空间使用 return total ``` 上述代码片段展示了简单的函数定义过程里涉及到的一些基础概念实例化展示形式之一。 #### 综合评价标准的应用案例探讨 针对某些特殊领域像机器学习等领域内的大型神经网络架构设计过程中不仅需要关心单次前向传播预测耗时长短同时也得兼顾训练阶段参数更新迭代所需要的庞大中间结果保区域安排合理与否等问题因此往往采用更为精细复杂的理论框架来进行全方位角度深入剖析研究工作以便最终得出科学合理的结论指导实践操作环节顺利开展下去[^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值