CNN和LSTM的计算复杂度分析

前言:今天做边缘计算的时候,在评估模型性能的时候发现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_ModelInput shapes: [torch.Size([32, 1, 1024])]Output shape: torch.Size([32, 10])
Layer: Conv1dInput shapes: [torch.Size([32, 1, 1024])]Output shape: torch.Size([32, 32, 1024])
Layer: ReLUInput shapes: [torch.Size([32, 32, 1024])]Output shape: torch.Size([32, 32, 1024])
Layer: Conv1dInput shapes: [torch.Size([32, 32, 1024])]Output shape: torch.Size([32, 32, 1024])
Layer: ReLUInput shapes: [torch.Size([32, 32, 1024])]Output shape: torch.Size([32, 32, 1024])
Layer: MaxPool1dInput shapes: [torch.Size([32, 32, 1024])]Output shape: torch.Size([32, 32, 512])
Layer: Conv1dInput shapes: [torch.Size([32, 32, 512])]Output shape: torch.Size([32, 64, 512])
Layer: ReLUInput shapes: [torch.Size([32, 64, 512])]Output shape: torch.Size([32, 64, 512])
Layer: MaxPool1dInput shapes: [torch.Size([32, 64, 512])]Output shape: torch.Size([32, 64, 256])
Layer: Conv1dInput shapes: [torch.Size([32, 64, 256])]Output shape: torch.Size([32, 128, 256])
Layer: ReLUInput shapes: [torch.Size([32, 128, 256])]Output shape: torch.Size([32, 128, 256])
Layer: MaxPool1dInput shapes: [torch.Size([32, 128, 256])]Output shape: torch.Size([32, 128, 128])
Layer: SequentialInput shapes: [torch.Size([32, 1, 1024])]Output shape: torch.Size([32, 128, 128])
Layer: LSTMInput shapes: [torch.Size([32, 128, 128]), <class 'tuple'>]Output shapes: [torch.Size([32, 128, 256]), <class 'tuple'>]
Layer: LinearInput shapes: [torch.Size([32, 128, 256])]Output shape: torch.Size([32, 128, 256])
Layer: AttentionInput shapes: [torch.Size([32, 128]), torch.Size([32, 128, 256])]Output shape: torch.Size([32, 1, 128])
Layer: LayerNormInput shapes: [torch.Size([32, 256])]Output shape: torch.Size([32, 256])
Layer: ResidualConnectionInput shapes: [torch.Size([32, 256]), <class 'function'>]Output shape: torch.Size([32, 256])
Layer: LinearInput shapes: [torch.Size([32, 256])]Output shape: torch.Size([32, 500])
Layer: ReLUInput shapes: [torch.Size([32, 500])]Output shape: torch.Size([32, 500])
Layer: DropoutInput shapes: [torch.Size([32, 500])]Output shape: torch.Size([32, 500])
Layer: LinearInput shapes: [torch.Size([32, 500])]Output shape: torch.Size([32, 10])
Layer: SequentialInput shapes: [torch.Size([32, 256])]Output shape: torch.Size([32, 10])

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

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

相关文章

StarRocks 中 CURRENT_TIMESTAMP 和 current_time 分区过滤问题

背景 本文基于Starrocks 3.3.5 最近在进行Starrocks 跑数据的时候&#xff0c;发现了一个SQL 扫描了所有分区的数据&#xff0c;简化后的SQL如下&#xff1a; select date_created from tableA where date_createddate_format(current_time(), %Y-%m-%d %H:%i:%S) limit 20其…

从物理学到机器学习:用技术手段量化分析职场被动攻击行为

从物理学到机器学习:用技术手段量化分析职场被动攻击行为 1. 从物理系统视角看团队协作 1.1 团队系统的能量模型 在热力学系统中,系统的总能量由动能和势能组成。类比到团队协作中,我们可以建立如下模型: class TeamEnergy:def __init__(self, members):self.kinetic = …

Pytroch搭建全连接神经网络识别MNIST手写数字数据集

编写步骤 之前已经记录国多次的编写步骤了&#xff0c;无需多言。 &#xff08;1&#xff09;准备数据集 这里我们使用MNIST数据集&#xff0c;有官方下载渠道。我们直接使用torchvison里面提供的数据读取功能包就行。如果不使用这个&#xff0c;自己像这样子构建也一样。 # …

Java 基本数据类型 vs 包装类(引用数据类型)

一、核心概念对比&#xff08;以 int vs Integer 为例&#xff09; 特性基本数据类型&#xff08;int&#xff09;包装类&#xff08;Integer&#xff09;数据类型原始值&#xff08;Primitive Value&#xff09;对象&#xff08;Object&#xff09;默认值0null内存位置栈&…

什么是 强化学习(RL):以DQN、PPO等经典模型

什么是 强化学习(RL):以DQN、PPO等经典模型 DQN(深度 Q 网络)和 PPO(近端策略优化)共同属于强化学习(Reinforcement Learning,RL)这一领域。强化学习是机器学习中的一个重要分支,其核心在于智能体(Agent)通过与环境进行交互,根据环境反馈的奖励信号来学习最优的…

【Sql Server】在SQL Server中生成雪花ID(Snowflake ID)

大家好&#xff0c;我是全栈小5&#xff0c;欢迎来到《小5讲堂》。 这是《Sql Server》系列文章&#xff0c;每篇文章将以博主理解的角度展开讲解。 温馨提示&#xff1a;博主能力有限&#xff0c;理解水平有限&#xff0c;若有不对之处望指正&#xff01; 目录 前言认识雪花ID…

HTML 表单处理进阶:验证与提交机制的学习心得与进度(一)

引言 在前端开发的广袤领域中&#xff0c;HTML 表单处理堪称基石般的存在&#xff0c;是构建交互性 Web 应用不可或缺的关键环节。从日常频繁使用的登录注册表单&#xff0c;到功能多样的搜索栏、反馈表单&#xff0c;HTML 表单如同桥梁&#xff0c;紧密连接着用户与 Web 应用…

C# CancellationTokenSource CancellationToken Task.Run传入token 取消令牌

基本使用方法创建 CancellationTokenSource获取 CancellationToken将 CancellationToken 传递给任务***注意*** 在任务中检查取消状态请求取消处理取消异常 高级用法设置超时自动取消或者使用 CancelAfter 方法关联多个取消令牌注册回调 注意事项 CancellationTokenSource 是 …

Git 之配置ssh

1、打开 Git Bash 终端 2、设置用户名 git config --global user.name tom3、生成公钥 ssh-keygen -t rsa4、查看公钥 cat ~/.ssh/id_rsa.pub5、将查看到的公钥添加到不同Git平台 6、验证ssh远程连接git仓库 ssh -T gitgitee.com ssh -T gitcodeup.aliyun.com

cli命令编写

新建文件夹 template-cli template-cli下运行 npm init生成package.json 新建bin文件夹和index.js文件 编写index.js #! /usr/bin/env node console.log(hello cli)package.json增加 bin 字段注册命令template-cli template-cli命令对应执行的内容文件 bin/index.js 运行 n…

vue3自定义动态锚点列表,实现本页面锚点跳转效果

需求&#xff1a;当前页面存在多个模块且内容很长时&#xff0c;需要提供一个锚点列表&#xff0c;可以快速查看对应模块内容 实现步骤&#xff1a; 1.每个模块添加唯一id&#xff0c;添加锚点列表div <template><!-- 模块A --><div id"modalA">…

L2TP实验

一、实验拓扑 二、实验内容 手工部署IPec VPN 三、实验步骤 1、配置接口IP和安全区域 [PPPoE Client]firewall zone trust [PPPoE Client-zone-trust]add int g 1/0/0[NAS]firewall zone untrust [NAS-zone-untrust]add int g 1/0/1 [NAS]firewall zone trust [NAS-zon…

青少年编程与数学 02-012 SQLite 数据库简介 01课题、数据库概要

青少年编程与数学 02-012 SQLite 数据库简介 01课题、数据库概要&#xff09; 一、特点二、功能 课题摘要:SQLite 是一种轻量级的嵌入式关系型数据库管理系统。 一、特点 轻量级 它不需要单独的服务器进程来运行。不像 MySQL 或 PostgreSQL 这样的数据库系统需要一个专门的服务…

分布式系统面试总结:3、分布式锁(和本地锁的区别、特点、常见实现方案)

仅供自学回顾使用&#xff0c;请支持javaGuide原版书籍。 本篇文章涉及到的分布式锁&#xff0c;在本人其他文章中也有涉及。 《JUC&#xff1a;三、两阶段终止模式、死锁的jconsole检测、乐观锁&#xff08;版本号机制CAS实现&#xff09;悲观锁》&#xff1a;https://blog.…

Ubuntu 系统上完全卸载 Docker

以下是在 Ubuntu 系统上完全卸载 Docker 的分步指南 一.卸载验证 二.卸载步骤 1.停止 Docker 服务 sudo systemctl stop docker.socket sudo systemctl stop docker.service2.卸载 Docker 软件包 # 移除 Docker 核心组件 sudo apt-get purge -y \docker-ce \docker-ce-cli …

Postman 版本信息速查:快速定位版本号

保持 Postman 更新至最新版本是非常重要的&#xff0c;因为这能让我们享受到最新的功能&#xff0c;同时也保证了软件的安全性。所以&#xff0c;如何快速查看你的 Postman 版本信息呢&#xff1f; 如何查看 Postman 的版本信息教程

EF Core 异步方法

文章目录 前言一、为什么使用异步方法二、核心异步方法1&#xff09;查询数据2&#xff09;保存数据3&#xff09;事务处理 三、异步查询最佳实践1&#xff09;始终使用 await2&#xff09;组合异步操作3&#xff09;并行查询&#xff08;谨慎使用&#xff09; 四、异常处理五、…

装饰器模式介绍和典型实现

装饰器模式&#xff08;Decorator Pattern&#xff09;是一种结构型设计模式&#xff0c;它允许你通过将对象放入包含行为的特殊封装对象中来为原对象添加新的功能。装饰器模式的主要优点是可以在运行时动态地添加功能&#xff0c;而不需要修改原对象的代码。这使得代码更加灵活…

【 <二> 丹方改良:Spring 时代的 JavaWeb】之 Spring Boot 中的日志管理:Logback 的集成

<前文回顾> 点击此处查看 合集 https://blog.csdn.net/foyodesigner/category_12907601.html?fromshareblogcolumn&sharetypeblogcolumn&sharerId12907601&sharereferPC&sharesourceFoyoDesigner&sharefromfrom_link <今日更新> 一、开篇整…

神经网络知识点整理

目录 ​一、深度学习基础与流程 二、神经网络基础组件 三、卷积神经网络&#xff08;CNN&#xff09;​编辑 四、循环神经网络&#xff08;RNN&#xff09;与LSTM 五、优化技巧与调参 六、应用场景与前沿​编辑 七、总结与展望​编辑 一、深度学习基础与流程 机器学习流…