CNN和LSTM的计算复杂度分析

news2025/3/31 15:44:48

前言:今天做边缘计算的时候,在评估模型性能的时候发现NPU计算的大部分时间都花在了LSTM上,使用的是Bi-LSTM(耗时占比98%),CNN耗时很短,不禁会思考为什么LSTM会花费这么久时间。

 首先声明一下实验条件:这里使用的是振动信号,输入的数据,长度是1024,通道是1通道输入,batchsize也是1

一、CNN计算复杂度公式:

卷积核大小为 K x K,输入通道数为 C_in,输出通道数为 C_out,输入大小为 W x H

卷积操作的复杂度: O(K*K * C_in * C_out * W * H)

举个例子:我的第一个卷积层input:1channel,output:32channels,卷积核大小是1*3,为了保持输入数据长度和输出数据长度保持不变,padding=(k-1)/2=1

输入数据格式:1*1*1024(batchsize、channel、len)

输入数据格式: 1*32*1024

计算复杂度:1*32*3*1024

二、LSTM计算复杂度公式:

假设 LSTM 的隐藏层大小为 H,输入大小为 I,时间步数为 T

每个时间步的计算复杂度为 O(I * H + H^2)(包括矩阵乘法和激活函数)。

LSTM计算复杂度为 O(T * (I * H + H*H))

举个例子:输入大小是指上一层CNN输出的通道数128,隐藏层大小设置为128,时间步数就是数据长度:128

复杂度为:128*(128*128+128*128)=4194304

计算比例:4194304%(32*3*1024)=43%

因为这个是双层lstm:43*2=86符合预期,在实际计算中LSTM花费的时间更长,我估计是NPU对CNN结构的计算优化更好吧,下面是网络的完整结构

Layer: CNN_LSTM_Model
  Input shapes: [torch.Size([32, 1, 1024])]
  Output shape: torch.Size([32, 10])
Layer: Conv1d
  Input shapes: [torch.Size([32, 1, 1024])]
  Output shape: torch.Size([32, 32, 1024])
Layer: ReLU
  Input shapes: [torch.Size([32, 32, 1024])]
  Output shape: torch.Size([32, 32, 1024])
Layer: Conv1d
  Input shapes: [torch.Size([32, 32, 1024])]
  Output shape: torch.Size([32, 32, 1024])
Layer: ReLU
  Input shapes: [torch.Size([32, 32, 1024])]
  Output shape: torch.Size([32, 32, 1024])
Layer: MaxPool1d
  Input shapes: [torch.Size([32, 32, 1024])]
  Output shape: torch.Size([32, 32, 512])
Layer: Conv1d
  Input shapes: [torch.Size([32, 32, 512])]
  Output shape: torch.Size([32, 64, 512])
Layer: ReLU
  Input shapes: [torch.Size([32, 64, 512])]
  Output shape: torch.Size([32, 64, 512])
Layer: MaxPool1d
  Input shapes: [torch.Size([32, 64, 512])]
  Output shape: torch.Size([32, 64, 256])
Layer: Conv1d
  Input shapes: [torch.Size([32, 64, 256])]
  Output shape: torch.Size([32, 128, 256])
Layer: ReLU
  Input shapes: [torch.Size([32, 128, 256])]
  Output shape: torch.Size([32, 128, 256])
Layer: MaxPool1d
  Input shapes: [torch.Size([32, 128, 256])]
  Output shape: torch.Size([32, 128, 128])
Layer: Sequential
  Input shapes: [torch.Size([32, 1, 1024])]
  Output shape: torch.Size([32, 128, 128])
Layer: LSTM
  Input shapes: [torch.Size([32, 128, 128]), <class 'tuple'>]
  Output shapes: [torch.Size([32, 128, 256]), <class 'tuple'>]
Layer: Linear
  Input shapes: [torch.Size([32, 128, 256])]
  Output shape: torch.Size([32, 128, 256])
Layer: Attention
  Input shapes: [torch.Size([32, 128]), torch.Size([32, 128, 256])]
  Output shape: torch.Size([32, 1, 128])
Layer: LayerNorm
  Input shapes: [torch.Size([32, 256])]
  Output shape: torch.Size([32, 256])
Layer: ResidualConnection
  Input shapes: [torch.Size([32, 256]), <class 'function'>]
  Output shape: torch.Size([32, 256])
Layer: Linear
  Input shapes: [torch.Size([32, 256])]
  Output shape: torch.Size([32, 500])
Layer: ReLU
  Input shapes: [torch.Size([32, 500])]
  Output shape: torch.Size([32, 500])
Layer: Dropout
  Input shapes: [torch.Size([32, 500])]
  Output shape: torch.Size([32, 500])
Layer: Linear
  Input shapes: [torch.Size([32, 500])]
  Output shape: torch.Size([32, 10])
Layer: Sequential
  Input shapes: [torch.Size([32, 256])]
  Output shape: torch.Size([32, 10])

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2323457.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

UniApp 表单校验两种方式对比:命令式与声明式

目录 前言1. 实战2. Demo 前言 &#x1f91f; 找工作&#xff0c;来万码优才&#xff1a;&#x1f449; #小程序://万码优才/r6rqmzDaXpYkJZF 以下主要针对Demo讲解&#xff0c;从实战中的体会 何为命令式 何为声明式 命令式的体验&#xff0c;随时都会有提交的按钮&#xff…

LCR 187. 破冰游戏(python3解法)

难度&#xff1a;简单 社团共有 num 位成员参与破冰游戏&#xff0c;编号为 0 ~ num-1。成员们按照编号顺序围绕圆桌而坐。社长抽取一个数字 target&#xff0c;从 0 号成员起开始计数&#xff0c;排在第 target 位的成员离开圆桌&#xff0c;且成员离开后从下一个成员开始计数…

centOS 7.9 65bit 修复Openssh漏洞

一、背景&#xff1a; 在使用centos 7.9 64bit版本操作系统时有扫描出如下的漏洞&#xff1a; 二、修复openssh漏洞操作 升级注意事项 (一下所有的操作默认都是root或者管理员权限&#xff0c;如果遇到权限问题每个指令以及指令组合都要在前面加sudo) 1、查看CentOS操作系统信…

JDBC-添加数据

文章目录 准备数据库添加数据引入数据库依赖包 准备数据库 自行安装软件&#xff0c;利用小皮内嵌的数据 添加数据 引入数据库依赖包 结构 drivercom.mysql.cj.jdbc.Driver urljdbc:mysql://127.0.0.1:3308/yanyuuserroot passwordrootpackage com.yanyu;import java.sql.*;…

衡石科技HENGSHI SENSE异构数据关联技术深度解析:揭秘5-8倍性能提升背后的“异构过滤“架构

引言&#xff1a;多源数据关联的行业痛点 在大数据时代&#xff0c;企业数据通常分散在多个异构系统中——关系型数据库、NoSQL、数据仓库、湖仓一体平台等。根据Forrester调研&#xff0c;超过78%的企业需要同时访问5种以上不同类型的数据源进行分析&#xff0c;但传统ETL和跨…

基于Netlify + Localtunnel 实现本地项目“无服务器”部署上线

基于Netlify Localtunnel 实现本地项目“无服务器”部署上线 1. 先看效果图2. 实现步骤2.1 分两步走2.2 netlify 部署前端资源2.3 Localtunnel 映射 localhost 服务 3. 其它工具内网穿透工具对比4. 总结5. 参考资料 1. 先看效果图 地址&#xff1a;zqchat 2. 实现步骤 2.1 …

设计模式之创建型5种

设计模式 为什么设计模式是23种创建型 对象创建为什么设计模式是23种 设计模式之所以被归纳为23种,而非其他数量,源于GoF(Gang of Four)在1994年的系统性总结和分类。这一数量的确定并非偶然,而是基于以下核心原因: 他们遵循“大三律”(Rule of Three),即只有经过三个…

Java + LangChain 实战入门,开发大语言模型应用!

在 Baeldung 上看到了一篇介绍基于 Java LangChain 开发大语言模型应用的基础入门文章&#xff0c;写的非常不错&#xff0c;非常适合初学者。于是&#xff0c;我抽空翻译了一下。 原文地址&#xff1a;https://www.baeldung.com/java-langchain-basics翻译&#xff1a; Java…

Java多线程与高并发专题—— CyclicBarrier 和 CountDownLatch 有什么异同?

引入 上一篇我们了解CountDownLatch的原理和常见用法&#xff0c;在CountDownLatch的源码注释中&#xff0c;有提到&#xff1a; 另一种典型用法是将一个问题分解为 N 个部分&#xff0c;用一个Runnable描述每个部分&#xff0c;该Runnable执行相应部分的任务并对闭锁进行倒计…

leetcode543.二叉树的直径

当前顶点作为拐点时&#xff0c;求左子树加上右子树的高度可以求出该通过该顶点的直径大小&#xff0c;再对该顶点和左右子节点作为拐点时直径大小进行比对&#xff0c;返回最大值 缺点是递归了多次 /*** Definition for a binary tree node.* public class TreeNode {* …

Java EE 进阶:MyBatis案例练习

表白墙 首先我们先准备一下数据库的数据 创建一个信息表 DROP TABLE IF EXISTS message_info;CREATE TABLE message_info (id INT ( 11 ) NOT NULL AUTO_INCREMENT,from VARCHAR ( 127 ) NOT NULL,to VARCHAR ( 127 ) NOT NULL,message VARCHAR ( 256 ) NOT NULL,delete_fla…

路由选型终极对决:直连/静态/动态三大类型+华为华三思科配置差异,一张表彻底讲透!

路由选型终极对决&#xff1a;直连/静态/动态三大类型华为华三思科配置差异&#xff0c;一张表彻底讲透&#xff01; 一、路由&#xff1a;互联网世界的导航系统二、路由类型深度解析三者的本质区别 三、 解密路由表——网络设备的GPS华为&#xff08;Huawei&#xff09;华三&a…

01 相机标定与相机模型介绍

学完本文,您将了解不同相机模型分类、内参意义,及对应的应用代码模型 标定的意义 建模三维世界点投影到二维图像平面的过程。标定输出的是相机模型。 相机模型 相机模型可以解理解为投影模型 +

SICAR标准 汽车焊装生产线触摸屏操作说明

目录 SIMATIC HMI 是西门子工业自动化解决方案的核心组件&#xff0c;支持实时设备监控与交互&#xff0c;文档中展示了其在焊装生产线中以SICAR标准为基础的具体应用&#xff0c;包括车型切换&#xff08;如 AY2/A26&#xff09;、KMC 夹具配置及能源效率分析&#xff0c;适用…

Selenium Web自动化如何快速又准确的定位元素路径,强调一遍是元素路径

如果文章对你有用&#xff0c;请给个赞&#xff01; 匹配的ChromeDriver和浏览器版本是更好完成自动化的基础&#xff0c;可以从这里去下载驱动程序&#xff1a; 最全ChromeDriver下载含win linux mac 最新版本134.0.6998.165 持续更新..._chromedriver 134-CSDN博客 如果你问…

鸿蒙-全屏播放页面(使用相对布局)---持续更新中

最终实现效果图&#xff1a; 实现步骤 创建FullScreenPlay.ets全品播放页面 并将其修改为启动页面。 全屏播放&#xff0c;屏幕必然横过来&#xff0c;所以要将窗口横过来。 编辑 src/main/ets/entryability/EntryAbility.ets 若写在/EntryAbility.ets中&#xff0c;则所有…

全面讲解python的uiautomation包

在常规的模拟鼠标和键盘操作&#xff0c;我们一般使用pyautogui&#xff0c;uiautomation模块不仅能直接支持这些操作&#xff0c;还能通过控件定位方式直接定位到目标控件的位置&#xff0c;而不需要自己去获取对应坐标位置。uiautomation模块不仅支持任意坐标位置截图&#x…

CentOS 7 源码安装libjsoncpp-1.9.5库

安装依赖工具 sudo yum install cmake make gcc cmake 需要升级至 3.8.0 以上可参考&#xff1a;CentOS安装CMakegcc 需要升级至9.0 以上可参考&#xff1a;CentOS 7升级gcc版本 下载源码 wget https://github.com/open-source-parsers/jsoncpp/archive/refs/tags/1.9.5.…

备赛蓝桥杯之第十六届模拟赛第1期职业院校组第五题:回忆画廊

提示&#xff1a;本篇文章仅仅是作者自己目前在备赛蓝桥杯中&#xff0c;自己学习与刷题的学习笔记&#xff0c;写的不好&#xff0c;欢迎大家批评与建议 由于个别题目代码量与题目量偏大&#xff0c;请大家自己去蓝桥杯官网【连接高校和企业 - 蓝桥云课】去寻找原题&#xff0…

Windows下docker使用教程

docker安装 镜像制作镜像加载容器创建更新镜像导出镜像 Windows10安装dockerdocker image制作docker 镜像加载docker 容器创建更新imageimage 导出为.tar文件 #以Windows10 、11为例 linux和Windows区别在于docker安装的程序是哪个操作系统的&#xff0c;后面的内容其实不变 …