李沐--動手學深度學習 LSTM

1.從零開始實現LSTM

#從零開始實現長短期記憶網絡
import torch
from torch import nn
from d2l import torch as d2l#加載時光機器數據集
batch_size,num_steps = 32,35
train_iter,vocab = d2l.load_data_time_machine(batch_size,num_steps)#1.定義和初始化模型參數:
#超參數num_hiddens定義隱藏單元的數量。按照標準差0.01的高斯分布初始化權重,并將偏置項設為0。
def get_lstm_params(vocab_size,num_hiddens,device):num_inputs = num_outputs = vocab_sizedef normal(shape):return torch.randn(size=shape,device=device)*0.01def three():return (normal((num_inputs,num_hiddens)),normal((num_hiddens,num_hiddens)),torch.zeros(num_hiddens,device=device))W_xi,W_hi,b_i = three() #輸入門參數W_xf,W_hf,b_f = three() #遺忘門參數W_xo,W_ho,b_o = three() #輸出門參數W_xc,W_hc,b_c = three() #候選記憶元參數#輸出層參數W_hq = normal((num_hiddens,num_outputs))b_q = torch.zeros(num_outputs,device=device)#附加梯度params = [W_xi,W_hi,b_i,W_xf,W_hf,b_f,W_xo,W_ho,b_o,W_xc,W_hc,b_c,W_hq,b_q]for param in params:param.requires_grad_(True)return params
#2.定義模型
#在初始化函數中,長短期記憶網絡的隱狀態需要返回一個額外的記憶元,單元的值為0,形狀為(批量大小,隱藏單元數)
def init_lstm_state(batch_size,num_hiddens,device):return (torch.zeros((batch_size,num_hiddens),device=device),torch.zeros((batch_size,num_hiddens),device=device))
#實際模型的定義與前面討論的一樣:提供三個門和一個額外的記憶元。
#只有隱狀態才會傳遞到輸出層,而記憶元mathbf{C}_t不直接參與輸出計算。
def lstm(inputs,state,params):[W_xi,W_hi,b_i,W_xf,W_hf,b_f,W_xo,W_ho,b_o,W_xc,W_hc,b_c,W_hq,b_q] = params(H,C) = stateoutputs = []for X in inputs:I = torch.sigmoid((X @ W_xi) + (H @ W_hi) + b_i)F = torch.sigmoid((X @ W_xf) + (H @ W_hf) + b_f)O = torch.sigmoid((X @ W_xo) + (H @ W_ho) + b_o)C_tilda = torch.tanh((X @ W_xc) + (H @ W_hc) + b_c)C = F * C + I * C_tildaH = O * torch.tanh(C)Y = (H @ W_hq) + b_qoutputs.append(Y)return torch.cat(outputs,dim=0),(H,C)
#3.訓練和預測
vocab_size,num_hiddens,device = len(vocab),256,d2l.try_gpu()
num_epochs,lr = 500,1
model = d2l.RNNModelScratch(len(vocab),num_hiddens,device,get_lstm_params,init_lstm_state,lstm)
print(d2l.train_ch8(model,train_iter,vocab,lr,num_epochs,device))
d2l.plt.show()

2.簡潔實現LSTM

#簡潔實現長短期記憶網絡
import torch
from torch import nn
from d2l import torch as d2l#加載時光機器數據集
batch_size,num_steps = 32,35
train_iter,vocab = d2l.load_data_time_machine(batch_size,num_steps)vocab_size,num_hiddens,device = len(vocab),256,d2l.try_gpu()
num_epochs,lr = 500,1num_inputs = vocab_size
lstm_layer = nn.LSTM(num_inputs,num_hiddens)
model = d2l.RNNModel(lstm_layer,len(vocab))
model = model.to(device)
print(d2l.train_ch8(model,train_iter,vocab,lr,num_epochs,device))
d2l.plt.show()

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

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

相關文章

面經的疑難雜癥

1.介紹一下虛擬地址,虛擬地址是怎么映射到物理地址的? 虛擬地址是指在采用虛擬存儲管理的操作系統中,進程訪問內存時所使用的地址。每個進程都有獨立的虛擬地址空間,虛擬地址通過操作系統和硬件(如MMU,內存…

去噪擴散概率模型(DDPM)全解:從數學基礎到實現細節

一、 概述 在這篇博客文章中,我們將深入探討去噪擴散概率模型(也被稱為 DDPMs,擴散模型,基于得分的生成模型,或簡稱為自動編碼器),這可以說是AIGC最近幾年飛速發展的基石,如果你想做…

【系統分析師】2011年真題:案例分析-答案及詳解

文章目錄 試題1【問題 1】【問題 2】【問題 3】 試題2【問題 1】【問題 2】【問題 3】 試題3【問題 1】【問題 2】【問題 3】 試題4【問題 1】【問題 2】【問題 3】 試題5【問題 1】【問題 2】【問題 3】 試題1 隨著寬帶應用快速發展,用戶要求系統服務提供商提供基…

【unitrix】 1.7 規范化常量類型結構(standardization.rs)

一、源碼 這段代碼實現了一個二進制數字標準化系統,用于將二進制數字類型(B0/B1)轉換為更簡潔的表示形式。 //! 二進制數字標準化模塊 / Binary Number Normalization Module //! //! 提供將二進制數字(B0/B1)標準化為更簡潔表示形式的功能…

NJet Portal 應用門戶管理介紹

nginx向云原生演進,All in OpenNJet! 1. 應用門戶簡介 NJet 應用引擎是基于 Nginx 的面向互聯網和云原生應用提供的運行時組態服務程序,作為底層引擎,NJet 實現了NGINX 云原生功能增強、安全加固和代碼重構,利用動態加…

uni-app學習筆記三十六--分段式選項卡組件的使用

先來看效果: 上圖有3個選項卡(PS:uniapp官方稱之為分段器,我還是習慣叫選項卡),需要實現點擊不同的選項卡時下方切換顯示對應的數據。 下面介紹下實現的過程。 1.在uniapp官方文檔下載并安裝該擴展組件:u…

Qt:Qt桌面程序正常退出注意事項

一般情況下,Qt窗體的創建和顯示命令如下: Main_window main_window; main_window.show(); 主窗體中設置屬性Qt::WA_DeleteOnClose setAttribute(Qt::WA_DeleteOnClose); 則在main.cpp中可以將窗體創建為指針,這樣在退出時可以正確釋放指針…

【arXiv2024】時間序列|TimesFM-ICF:即插即用!時間序列預測新王者!吊打微調!

論文地址:https://arxiv.org/pdf/2410.24087 代碼地址:https://github.com/uctb/TSFM 為了更好地理解時間序列模型的理論與實現,推薦參考UP “ThePPP時間序列” 的教學視頻。該系列內容系統介紹了時間序列相關知識,并提供配套的論…

從0開始學習語言模型--Day02-如何最大化利用硬件

如何利用硬件 這個單元分為內核、并行處理和推理。 內核(Kernels) 我們說的內核一般指的就是GPU,這是我們用于計算的地方,一般說的計算資源就指的是GPU的大小。我們模型所用的數據和參數一般存儲在內存里,假設把內存…

ElasticSearch配置詳解:設置內存鎖定的好處

什么是內存鎖定 "bootstrap": {"memory_lock": "true" }內存鎖定是指將Elasticsearch的JVM堆內存鎖定在物理內存中,防止操作系統將其交換(swap)到磁盤。 內存交換是操作系統的虛擬內存管理機制,當…

成功解決 ValueError: Unable to find resource t64.exe in package pip._vendor.distlib

解決問題 我們在本地的命令行中運行指令"python -m pip install --upgrade pip"的時候,報了如下的錯誤: 解決思路 我們需要重新安裝一下pip。 解決方法 步驟1: 通過執行下面的指令刪除本地的pip: python -m pip uninstall pip…

倉庫物資出入庫管理系統源碼+uniapp小程序

一款基于ThinkPHPuniapp開發的倉庫物資出入庫管理系統,適用于單位內部物資采購、發放管理的庫存管理系統。提供全部無加密源碼,支持私有化部署。 更新日志: 新增 基于UNIAPP開發的手機端,適配微信小程序 新增 字典管理 新增頁面…

基于機器學習的逐巷充填開采巖層運動地表沉降預測

基于機器學習的逐巷充填開采巖層運動地表沉降預測 1. 項目概述 本報告詳細介紹了使用Python和機器學習技術預測逐巷充填開采過程中地表沉降的方法。通過分析地質參數、開采參數和充填參數,構建預測模型評估地表沉降風險。 # 導入必要的庫 import numpy as np import pandas…

MotleyCrew ——拋棄dify、coze,手動搭建多agent工作流

1. MotleyCrew 核心組件 - 協調器: Crew MotleyCrew 的核心是一個 “Crew” 對象,即多代理系統的指揮者。Crew 持有一個全局的知識圖譜(使用 Kuzu 圖數據庫),用于記錄所有任務、任務單元和其執行狀態。 Cr…

掌握這些 Python 函數,讓你的代碼更簡潔優雅

在 Python 編程世界里,代碼的簡潔性與可讀性至關重要。簡潔優雅的代碼不僅便于自己后期維護,也能讓其他開發者快速理解邏輯。而 Python 豐富的內置函數和一些實用的第三方庫函數,就是實現這一目標的有力武器。接下來,就為大家介紹…

簡說ping、telnet、netcat

簡說 ping 和 telnet 命令的作用、用法和區別,方便理解它們在網絡診斷中的用途。 🌐 ping 命令 ? 作用: ping 用于檢測網絡連通性。它通過向目標主機發送 ICMP Echo 請求 并等待回應,從而判斷目標主機是否可達,并測…

基于STM32的超聲波模擬雷達設計

一、雷達概述 雷達(Radio Detection and Ranging,無線電探測與測距)是一種利用電磁波探測目標位置、速度等信息的主動式傳感器系統。其基本原理是發射電磁波并接收目標反射的回波,通過分析回波的時間差、頻率變化等參數&#xff0…

飛書多維表格利用 Amazon Bedrock AI 能力賦能業務

背景 飛書多維表格是一款功能強大的在線數據管理與協作工具。它打破傳統表格局限,將電子表格與數據庫特性融合,支持看板、甘特圖、表單等多種視圖自由切換,可根據項目進度、任務管理等不同場景靈活展示數據。其豐富的字段類型能精準適配各類…

表格對比工具推薦,快速比對Excel文件

軟件介紹 今天為大家推薦一款專為Excel用戶設計的表格比較工具,簡單易用,零基礎也能快速掌握。 輕量高效的辦公助手 Excel比較工具體積僅為11MB,占用空間小,運行流暢,適合各類電腦配置使用。 簡潔明了的操作界面 軟…

深入探究其內存開銷與JVM布局——Java Record

Java 14引入的Record類型如同一股清流,旨在簡化不可變數據載體的定義。它的核心承諾是:??透明的數據建模??和??簡潔的語法??。自動生成的equals(), hashCode(), toString()以及構造器極大地提升了開發效率。 當我們看到這樣的代碼: …