RNN循環神經網絡(一):基礎RNN結構、雙向RNN

RNN循環神經網絡

什么是循環神經網絡?

循環神經網絡(Recurrent Neural Network, RNN)是一類專門用于處理序列數據的神經網絡架構。與傳統的前饋神經網絡不同,RNN具有"記憶"能力,能夠捕捉數據中的時間依賴關系。

核心特點:

  1. 循環連接:RNN單元之間存在循環連接,使得信息能夠在網絡內部持續傳遞
  2. 參數共享:相同的權重參數在時間步之間共享,大大減少了模型參數數量
  3. 序列處理:能夠處理可變長度的輸入序列,適用于時序數據

基本結構:

RNN的基本單元包含一個隱藏狀態(hidden state),它在每個時間步都會被更新:

  • 新隱藏狀態 = f(當前輸入, 前一個隱藏狀態)

舉一個簡單的例子:

在這里插入圖片描述

簡單的循環神經網絡例子(多對多)

我們來做一個簡單的循環神經網絡,其實也就是跟上圖一致。

import torch
from torch import nnclass RNNCell(nn.Module):def __init__(self,input_size,hidden_size):super().__init__()self.input_size = input_sizeself.hidden_size = hidden_sizeself.w_hidden = torch.randn(hidden_size,hidden_size)self.w_input = torch.randn(input_size,hidden_size)self.tanh = nn.Tanh()def forward(self,x,hidden_state=None):N,input_size = x.shapeif hidden_state is None:hidden_state = torch.zeros(N,self.hidden_size)hidden_state = self.tanh(hidden_state @ self.w_hidden + x @ self.w_input)return hidden_stateclass RNN(nn.Module):def __init__(self,input_size,hidden_size):super().__init__()self.cell = RNNCell(input_size,hidden_size)self.w_output = torch.randn(hidden_size,hidden_size)def forward(self,x,hidden_state=None):N,L,input_size = x.shapeoutputs = []for i in range(L):x_i = x[:,i]hidden_state = self.cell(x_i,hidden_state)out = hidden_state @ self.w_outputoutputs.append(out)outputs = torch.stack(outputs,dim=1)return outputs,hidden_stateif __name__ == "__main__":x = torch.randn(5,3,10)model = RNN(10,20)y,h = model(x)print(y.shape)print(h.shape)

雙向循環神經網絡

雙向RNN其實也就是兩層RNN的疊加,分別更新的是兩層隱藏狀態以及兩層輸出。

在這里插入圖片描述

import torch
from torch import nnclass BiRNN(nn.Module):def __init__(self,input_size,hidden_size):super().__init__()self.input_size = input_sizeself.hidden_size = hidden_size#前向RNN和線性層self.forward_cell = nn.RNNCell(input_size,hidden_size)self.backward_cell = nn.RNNCell(input_size,hidden_size)#反向RNN和線性層self.forward_Linear = nn.Linear(hidden_size,hidden_size)self.backward_Linear = nn.Linear(hidden_size,hidden_size)def forward(self,x,hidden = None):N,L,input_size = x.shapeif hidden is None:#堆疊兩層隱藏層hidden = torch.zeros(2,N,self.hidden_size)h_forward = hidden[0]out_forward = []for i in range(L):h_forward = self.forward_cell(x[:,i],h_forward)out = self.forward_Linear(h_forward)out_forward.append(out)out_forward = torch.stack(out_forward,dim=1)x = torch.flip(x,dims=[1])h_backward = hidden[1]out_backward = []for i in range(L):h_backward = self.backward_cell(x[:,i],h_backward)out = self.backward_Linear(h_backward)out_backward.append(out)out_backward = torch.stack(out_backward,dim=1)outputs = torch.concat((out_forward,out_backward),dim=-1)hidden = torch.stack([h_forward,h_backward])return outputs,hiddenif __name__ == '__main__':x = torch.randn((5,3,10))model = BiRNN(10,20)outputs,hidden = model(x)print(outputs.shape)print(hidden.shape)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/95981.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/95981.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/95981.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

#C語言——刷題攻略:牛客編程入門訓練(十):攻克 循環控制(二),輕松拿捏!

🌟菜鳥主頁:晨非辰的主頁 👀學習專欄:《C語言刷題合集》 💪學習階段:C語言方向初學者 ?名言欣賞:"代碼行數決定你的下限,算法思維決定你的上限。" 目錄 1. BC82 乘法表…

daily notes[16]

文章目錄意大利語單詞 **“bello”**一、核心含義二、變形規則:最重要的部分1. 當 “bello” 位于 **名詞前面** 時2. 當 “bello” 位于 **名詞后面** 或 **動詞后面** 時三、用法總結與對比四、其他用法和常見表達references意大利語單詞 “bello” 融合了 指示形…

【知識庫】計算機二級python操作題(二)

文章目錄基本操作題1基本操作題2基本操作題3簡單應用題1簡單應用題2綜合應用題1基本操作題1考生文件夾下存在一個文件PY101.py,請寫代碼替換橫線,不修改其他代碼,實現以下功能,隨機選擇一個手機品牌屏幕輸出。 # 請在...處使用一行…

Nginx 服務用戶與防盜鏈配置

目錄 Nginx 服務用戶與防盜鏈配置 1. 隱藏版本號 1.1 配置方法 1.2 生效與驗證 2. 修改當前程序賬號 2.1 操作步驟 3. 緩存時間 3.1 配置方法 3.2 說明 4. 日志分割 4.1 實現方式(腳本自動分割) 5. 連接超時時間 5.1 核心超時指令&#xff0…

域格4G模塊通信協議之HTTP(三):下載大文件的兩種方式

域格ASR系列模塊支持HTTP下載大文件,本文將提供兩種方式。一、直接通過URC上報數據基礎操作核心指令說明配置說明響應說明應用示例注意點二、HTTP Range分段下載核心指令說明注意點一、直接通過URC上報數據 若文件體積適中,且需要 MCU 即時處理數據&…

Android 圖片 OOM 防護機制設計:大圖加載、內存復用與多級緩存

1. 為什么圖片加載總讓 Android 開發抓狂? 圖片是 Android 應用中不可或缺的元素,從用戶頭像到高清壁紙,從商品詳情頁到動態表情包,圖片無處不在。然而,圖片加載是內存管理的雷區,稍不留神就可能觸發臭名昭著的 OutOfMemoryError(OOM)。為啥圖片這么“吃內存”?原因很…

9月9日

TCP 服務器端#include <myhead.h> #define SER_PORT 8888 //服務器端口號 #define SER_IP "192.168.108.179" //服務器IP地址 int main(int argc, const char *argv[]) {//創建一個用于連接的套接字文件描述符int sfd socket(AF_INET, SOCK_STRE…

Docker生產部署

目錄 一、準備工作&#xff1a;理解 Docker 與 Spring Boot 的關系 1. Docker 是什么&#xff1f; 2. Spring Boot 為什么適合 Docker&#xff1f; 二、編寫Dockerfile 三、配置管理 掛載外部配置文件 四、用 docker-compose 編排多服務 一、準備工作&#xff1a;理解 Do…

ARM 基礎(3)

ARM匯編與C語言函數的相互調用及參數傳遞匯編調用C函數參數傳遞規則 前4個參數通過寄存器 R0-R3 傳遞&#xff0c;超出部分從右向左壓棧。32位返回值存于 R0&#xff0c;64位整數用 R0 和 R1&#xff0c;浮點數通過 S0/D0 返回。示例&#xff1a;ARM匯編調用C函數.global _star…

OpenCV計算機視覺筆記合集

參考課程&#xff1a; 【黑馬程序員 OpenCV入門教程】 [https://www.bilibili.com/video/BV1Fo4y1d7JL] ZZHow(ZZHow1024) 學習路線 基本的圖像處理方法&#xff1a;幾何變換&#xff0c;形態學變換&#xff0c;圖像平滑&#xff0c;直方圖操作&#xff0c;模板匹配&#…

Mybatis-12 第三方緩存-EhCache

配置文檔 Ehcache配置文件ehcache.xml Java Ehcache緩存的timeToIdleSeconds和timeToLiveSeconds區別 基本介紹 1.EhCache是一個純Java的緩存框架&#xff0c;具有快速、精干等特點 2.MyBatis有自己默認的二級緩存&#xff08;前面我們已經使用過了&#xff09;&#xff0c;…

元器件--電容器

文章目錄一、技術理論??1、電容定義??2、定義式??3、單位換算??4、電容作用??5、電容特性二、組成結構??1、極板&#xff08;電極&#xff09;??????2、介質&#xff08;絕緣層&#xff09;????3、引線&#xff08;電極引出端&#xff09;????4、封裝…

【Leetcode hot 100】146.LRU緩存

問題鏈接 146.LRU緩存 問題描述 請你設計并實現一個滿足 LRU (最近最少使用) 緩存 約束的數據結構。 實現 LRUCache 類&#xff1a; LRUCache(int capacity) 以 正整數 作為容量 capacity 初始化 LRU 緩存int get(int key) 如果關鍵字 key 存在于緩存中&#xff0c;則返回關…

MySQL超大數據量查詢與刪除優化

引言 在處理TB級數據時&#xff0c;傳統SQL操作可能導致性能崩潰。本文揭示MySQL超大數據量場景下的核心優化策略&#xff0c;通過生產環境案例展示如何將億級數據刪除耗時從8小時壓縮至8分鐘&#xff0c;并附完整監控方案與容災措施。 深度剖析海量數據操作痛點 1. 傳統刪除操…

【內存管理】常用的頁表映射函數

1、pgd_addr_end 根據當前虛擬地址 addr 和目標結束地址 end&#xff0c;計算當前 PGD 項 能夠覆蓋的最大虛擬地址范圍的結束地址 next。 如果 addr 和 end 跨越多個 PGD 項&#xff08;即 end 超出當前 PGD 項的地址范圍&#xff09;&#xff0c;則返回當前 PGD 項的地址邊界。…

XR數字融合工作站賦能新能源汽車專業建設的創新路徑

XR數字融合工作站作為集PC、VR、MR技術于一體的軟硬件集成平臺&#xff0c;憑借其多維交互、虛實融合、智能管理等特性&#xff0c;為新能源汽車專業的教學改革與創新提供了全新解決方案。一、教學場景革新&#xff1a;構建沉浸式、互動化學習環境XR數字融合工作站通過多形態拼…

C語言通用鏈表終章:優雅的收尾 - 清空與銷毀

各類資料學習下載合集 ?https://pan.quark.cn/s/8c91ccb5a474? 經過前面的學習,我們已經從零構建了一個功能強大的通用鏈表,它能自如地進行節點的插入和刪除。我們的“數據火車”已經可以馳騁在內存的世界里。然而,旅途終有終點,當火車完成任務后,如何安全、徹底地讓…

MATLAB R2025a安裝配置及使用教程(超詳細保姆級教程)

文章目錄前言什么是MATLAB&#xff1f;了解這款數據分析利器matlab安裝前準備工作MATLAB R2025a下載完整MATLAB R2025a安裝步驟MATLAB進階應用技巧前言 全網最新最全的MATLAB R2025a安裝教程來了&#xff01;2025年版本完整圖文指南&#xff0c;包含軟件下載、詳細安裝、密鑰激…

在Mybatis plus中如何使用自定義Sql

在演示UpdateWrapper的案例中&#xff0c;我們在代碼中編寫了更新的SQL語句&#xff1a;Test void testUpadateWrapper(){List<Long> ids List.of(1L,2L,4L);//生成SQLUpadateWrapper<User> wrapper new UpdateWrapper<User> ().setSql("balance balan…