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.pswp.cn/bicheng/74808.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/74808.shtml
英文地址,請注明出處:http://en.pswp.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 五、優化技巧與調參 六、應用場景與前沿?編輯 七、總結與展望?編輯 一、深度學習基礎與流程 機器學習流…