從代碼學習深度學習 - GRU PyTorch版

文章目錄

  • 前言
  • 一、GRU模型介紹
    • 1.1 GRU的核心機制
    • 1.2 GRU的優勢
    • 1.3 PyTorch中的實現
  • 二、數據加載與預處理
    • 2.1 代碼實現
    • 2.2 解析
  • 三、GRU模型定義
    • 3.1 代碼實現
    • 3.2 實例化
    • 3.3 解析
  • 四、訓練與預測
    • 4.1 代碼實現(utils_for_train.py)
    • 4.2 在GRU.ipynb中的使用
    • 4.3 輸出與可視化
    • 4.4 解析
  • 五、工具函數解析
    • 5.1 Timer
    • 5.2 Accumulator
    • 5.3 try_gpu
  • 六、可視化與繪圖
    • 6.1 代碼實現
    • 6.2 解析
  • 總結


前言

在深度學習領域,循環神經網絡(RNN)及其變種如GRU(Gated Recurrent Unit,門控循環單元)在處理序列數據時表現出色。相比傳統RNN,GRU通過更新門(Update Gate)和重置門(Reset Gate)簡化了結構,同時保持了對長期依賴關系的建模能力。本篇博客將通過PyTorch實現一個基于GRU的文本生成模型,結合《The Time Machine》數據集,逐步解析代碼實現的全過程。從數據預處理到模型訓練,再到結果可視化,我們將深入探討每個模塊的功能,并展示完整的代碼實現。


一、GRU模型介紹

GRU(Gated Recurrent Unit,門控循環單元)是循環神經網絡(RNN)的一種改進變種,由Kyunghyun Cho等人在2014年提出。它旨在解決傳統RNN在處理長序列時面臨的梯度消失問題,同時通過更簡潔的結構提升計算效率。相比LSTM(長短期記憶網絡),GRU減少了一個門控單元,使用更新門(Update Gate)和重置門(Reset Gate)來控制信息的流動,從而在保持性能的同時降低參數量。

1.1 GRU的核心機制

在這里插入圖片描述

GRU的工作原理基于兩個關鍵的門控單元:

  1. 更新門(Update Gate, z t z_t zt?
    更新門決定當前時間步的隱藏狀態在多大程度上保留上一時間步的隱藏狀態,以及接受多少新輸入的信息。其計算公式為:
    z t = σ ( W z ? [ h t ? 1 , x t ] + b z ) z_t = \sigma(W_z \cdot [h_{t-1}, x_t] + b_z) zt?=σ(Wz??[ht?1?,xt?]+bz?)
    其中, σ \sigma σ是sigmoid激活函數, h t ? 1 h_{t-1} ht?1? 是上一時間步的隱藏狀態, x t x_t xt? 是當前輸入, W z W_z Wz? b z b_z bz? 是可訓練的參數。

  2. 重置門(Reset Gate, r t r_t rt?
    重置門控制前一時間步的隱藏狀態在多大程度上影響當前候選隱藏狀態的計算。其計算公式為:
    r t = σ ( W r ? [ h t ? 1 , x t ] + b r ) r_t = \sigma(W_r \cdot [h_{t-1}, x_t] + b_r) rt?=σ(Wr??[ht?1?,xt?]+br?)

基于這兩個門,GRU計算候選隱藏狀態和新隱藏狀態:

  • 候選隱藏狀態( h ~ t \tilde{h}_t h~t?
    h ~ t = tanh ? ( W h ? [ r t ⊙ h t ? 1 , x t ] + b h ) \tilde{h}_t = \tanh(W_h \cdot [r_t \odot h_{t-1}, x_t] + b_h) h~t?=tanh(Wh??[rt?

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

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

相關文章

Flask學習筆記 - 項目結構 + 路由

前言 待業家中繼續學習。 Flask 項目結構 my_flask_app/ │ ├── app/ │ ├── __init__.py │ ├── routes/ -- 將不同功能模塊的路由分開管理 │ │ ├── __init__.py │ │ ├── main.py -- 主模塊的路由 │ │ └── auth.py -- 認證相關的路…

SQL 轉 PHP Eloquent、Doctrine ORM, 支持多數據庫

SQL 轉 PHP 說明 在 PHP 開發中,常使用 ORM(如 Eloquent、Doctrine)操作數據庫。手寫 ORM 模型繁瑣,gotool.top 提供 SQL 轉 PHP 工具,可自動生成 PHP 代碼,提高開發效率。 特色 支持 Laravel Eloquent …

【Python】Python 環境 + Pycharm 編譯器 官網免費下載安裝(圖文教程,新手安裝,Windows 10 系統)

目錄 Python 環境的下載安裝第一步 進入官網第二步 找到匹配 windows 系統的 python 下載頁面第三步 根據電腦 cpu 架構選擇 python 版本第四步 安裝 python 環境第五步 驗證 python 環境變量 Pycharm 的下載安裝第一步 進入官網第二步 安裝 Pycharm Community Edition第三步 第…

基于javaweb的SpringBoot圖片管理系統圖片相冊系統設計與實現(源碼+文檔+部署講解)

技術范圍:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬蟲、數據可視化、小程序、安卓app、大數據、物聯網、機器學習等設計與開發。 主要內容:免費功能設計、開題報告、任務書、中期檢查PPT、系統功能實現、代碼編寫、論文編寫和輔導、論文…

局域網:電腦或移動設備作為主機實現局域網訪問

電腦作為主機 1. 啟用電腦的網絡發現、SMB功能 2. 將訪問設備開啟WIFI或熱點,用此電腦連接;或多臺設備連接到同一WIFI 3. 此電腦打開命令行窗口,查看電腦本地的IP地址 Win系統:輸入"ipconfig",回車后如圖 4.…

use_tempaddr 筆記250405

use_tempaddr 筆記250405 use_tempaddr 是 Linux 系統中用于控制 IPv6 臨時隱私地址生成策略 的關鍵參數。以下是其詳細說明&#xff1a; &#x1f4dc; 參數定義 路徑&#xff1a; /proc/sys/net/ipv6/conf/<接口>/use_tempaddr默認值&#xff1a; 1&#xff08;大多數…

NO.66十六屆藍橋杯備戰|基礎算法-貪心-區間問題|凌亂的yyy|Rader Installation|Sunscreen|牛欄預定(C++)

區間問題是另?種?較經典的貪?問題。題??對的對象是?個?個的區間&#xff0c;讓我們在每個區間上做出取舍。 這種題?的解決?式?般就是按照區間的左端點或者是右端點排序&#xff0c;然后在排序之后的區間上&#xff0c;根據題?要求&#xff0c;制定出相應的貪?策略&…

用C語言控制鍵盤上的方向鍵

各位同學&#xff0c;大家好&#xff01;相信大家在學習C語言的過程中&#xff0c;都和我一樣&#xff0c;經常使用scanf函數來接受字符&#xff0c;數字&#xff0c;這些標準輸入信息&#xff0c;來實現自己設計的程序效果。 而我突然有一天&#xff08;對就是今天&#xff09…

特殊的質數肋骨--dfs+isp

1.dfs全排列組數&#xff0c;an記得還原 2.如果范圍確定且只比較質數&#xff0c;isp比線性篩快&#xff0c;主要這個范圍太大了 https://www.luogu.com.cn/problem/P1218 #include<bits/stdc.h> using namespace std; #define N 100011 typedef long long ll; typed…

定積分的應用(4.39-4.48)

battle cry 前言4.394.404.414.424.434.444.454.464.474.48 前言 題目確實比較多。slow down and take your time. 4.39 狂算了一遍&#xff0c;然后發現不是計算出問題了&#xff0c;是積分上下限寫錯了。還有把函數代進去也出了一點問題。 點火公式一家人我不記得&#x…

如何高效使用 Ubuntu 中文官方網站

Ubuntu 中文官方網站 一、快速導航與核心模塊 首頁焦點區 頂部菜單欄:快速訪問「下載」「文檔」「支持」「商店」等核心功能。輪播圖區:展示最新版本(如 Ubuntu 24.04 LTS)和特色功能(如 Ubuntu Pro 訂閱服務)。搜索框:支持中文關鍵詞搜索(如 "邊緣計算"),…

form實現pdf文件轉換成jpg文件

說明&#xff1a; 我希望將pdf文件轉換成jpg文件 請去下載并安裝 Ghostscript&#xff0c;gs10050w64.exe 配置環境變量&#xff1a;D:\Program Files\gs\gs10.05.0\bin 本地pdf路徑&#xff1a;C:\Users\wangrusheng\Documents\name.pdf 輸出文件目錄&#xff1a;C:\Users\wan…

Spring 核心技術解析【純干貨版】- XVIII:Spring 網絡模塊 Spring-WebSocket 模塊精講

在現代 Web 開發中&#xff0c;實時通信已成為提升用戶體驗的關鍵技術之一。傳統的 HTTP 輪詢方式存在較高的延遲和帶寬開銷&#xff0c;而 WebSocket 作為一種全雙工通信協議&#xff0c;能夠在客戶端和服務器之間建立持久連接&#xff0c;實現高效的雙向數據傳輸。 Spring 框…

VirtualBox安裝FnOS

1.下載FnOS鏡像 下載網址&#xff1a; https://www.fnnas.com/2.創建虛擬機 虛擬機配置如圖所示&#xff08;注意操作系統類型和網卡配置&#xff09; &#xff08;注意啟動順序&#xff09; 3.啟動虛擬機 網卡類型選擇橋接的Virtual Adapter 如果沒有IP地址或者IP地址無法…

java根據集合中對象的屬性值大小生成排名

1&#xff1a;根據對象屬性降序排列 public static <T extends Comparable<? super T>> LinkedHashMap<T, Integer> calculateRanking(List<ProductPerformanceInfoVO> dataList, Function<ProductPerformanceInfoVO, T> keyExtractor) {Linked…

grep命令: 過濾

[rootxxx ~]# grep root /etc/passwd [rootxxx ~]# grep -A 2 root /etc/passwd -A #匹配行后兩行 [rootxxx ~]# grep -B 2 root /etc/passwd -B #匹配行前兩行 [rootxxx ~]# grep -C 2 root /etc/passwd -C #前后2行 [rootxxx ~]# grep -n root /…

二十種中藥果實識別分類系統,Python/resnet18/pytorch

二十種中藥果實識別分類系統,Python/resnet18/pytorch 基于pytorch訓練, resnet18網絡&#xff0c;可用于訓練其他分類問題&#xff0c;也可自己重新訓練 20類中藥材具體包括&#xff1a;(1) 補骨脂&#xff0c;(2) 草豆蔻&#xff0c;(3) 川楝子&#xff0c;(4) 地膚子&…

SpringBoot啟動run方法分析

SpringBoot啟動run方法分析 1.場景引入 在項目啟動的時候&#xff0c;有時候我們需要在啟動的時候&#xff0c;執行一些邏輯。 比如說&#xff0c;項目啟動的時候&#xff0c;我想把一些熱門商品的數據加載到緩存中去&#xff1b; 比如說&#xff0c;自定義了一個netty服務…

Linux信號——信號的處理(3)

信號是什么時候被處理&#xff1f; 進程從內核態&#xff0c;切換到用戶態的時候&#xff0c;信號會被檢測處理。 內核態&#xff1a;操作系統的狀態&#xff0c;權限級別高 用戶態&#xff1a;你自己的狀態 內核態和用戶態 進程地址空間第三次 所謂的系統調用本質其實是一堆…

MySQL篇(四)事務相關知識詳解

MySQL篇(四&#xff09;事務相關知識詳解 MySQL篇(四&#xff09;事務相關知識詳解一、事務的特性&#xff08;ACID&#xff09;原子性&#xff08;Atomicity&#xff09;一致性&#xff08;Consistency&#xff09;隔離性&#xff08;Isolation&#xff09;持久性&#xff08;…