動學學深度學習05-深度學習計算

動學學深度學習pytorch

參考地址:https://zh.d2l.ai/

文章目錄

  • 動學學深度學習pytorch
    • 1-第05章-深度學習計算
      • 1. 層(Layer)與塊(Block)
        • 1.1 什么是深度學習中的“層”?
        • 1.2 什么是“塊”(Block)?
        • 1.3 PyTorch 中如何定義自定義塊?
      • 2. Sequential 與自定義順序塊
        • 2.1 `nn.Sequential` 的作用
        • 2.2 如何手寫簡化版 `MySequential`?
      • 3. 參數管理
        • 3.1 如何訪問模型任意層的參數?
        • 3.2 如何初始化參數?
        • 3.3 什么是參數綁定(共享)?
      • 4. 延后初始化(Deferred Initialization)
        • 4.1 什么是延后初始化?
      • 5. 自定義層
        • 5.1 如何創建不帶參數的層?
        • 5.2 如何創建帶參數的層?
      • 6. 模型讀寫
        • 6.1 如何保存與加載模型參數?
        • 6.2 如何保存/加載完整張量或張量字典?
      • 7. GPU 計算
        • 7.1 如何查看可用 GPU?
        • 7.2 如何將張量與模型移至 GPU?
        • 7.3 跨 GPU 注意事項


1-第05章-深度學習計算

1. 層(Layer)與塊(Block)

1.1 什么是深度學習中的“層”?

層是神經網絡的基本計算單元,接收輸入、生成輸出,并由一組可學習參數(權重、偏置)描述。

1.2 什么是“塊”(Block)?

塊是比層更大、可遞歸組合的抽象單元,可以表示:

  • 單個層
  • 多個層組成的組件
  • 整個模型本身
    塊通過類(class)實現,必須實現:
  • forward():前向傳播
  • 參數存儲與初始化
  • 反向傳播由框架自動完成。
1.3 PyTorch 中如何定義自定義塊?

示例:實現一個 20→256→10 的 MLP 塊

class MLP(nn.Module):def __init__(self):super().__init__()self.hidden = nn.Linear(20, 256)self.out = nn.Linear(256, 10)def forward(self, X):return self.out(F.relu(self.hidden(X)))

2. Sequential 與自定義順序塊

2.1 nn.Sequential 的作用

按順序串聯子模塊,自動將上一層的輸出作為下一層輸入。

net = nn.Sequential(nn.Linear(20, 256),nn.ReLU(),nn.Linear(256, 10)
)
2.2 如何手寫簡化版 MySequential
class MySequential(nn.Module):def __init__(self, *args):super().__init__()for idx, module in enumerate(args):self._modules[str(idx)] = moduledef forward(self, X):for block in self._modules.values():X = block(X)return X

3. 參數管理

3.1 如何訪問模型任意層的參數?
  • 索引方式
net[2].weight      # 第3層權重
net[2].bias.data   # 第3層偏置值
  • 一次性遍歷
for name, param in net.named_parameters():print(name, param.shape)
3.2 如何初始化參數?
  • 內置初始化器
nn.init.normal_(net[0].weight, mean=0, std=0.01)
nn.init.constant_(net[0].bias, 0)
  • 自定義初始化
def my_init(m):if type(m) == nn.Linear:with torch.no_grad():m.weight.uniform_(-10, 10)m.weight *= m.weight.abs() >= 5
net.apply(my_init)
3.3 什么是參數綁定(共享)?

多個層使用同一 Parameter 對象,修改一處即全部同步。

shared = nn.Linear(8, 8)
net = nn.Sequential(nn.Linear(4, 8), nn.ReLU(),shared, nn.ReLU(),shared, nn.ReLU(),nn.Linear(8, 1)
)

4. 延后初始化(Deferred Initialization)

4.1 什么是延后初始化?

框架直到第一次前向傳播時才根據輸入張量推斷各層權重形狀,無需手動指定輸入維度。

net = nn.Sequential(nn.LazyLinear(256), nn.ReLU(), nn.LazyLinear(10))
net(torch.randn(2, 20))  # 觸發初始化

5. 自定義層

5.1 如何創建不帶參數的層?

示例:將輸入減去均值

class CenteredLayer(nn.Module):def forward(self, X):return X - X.mean()
5.2 如何創建帶參數的層?

示例:自定義全連接層

class MyLinear(nn.Module):def __init__(self, in_units, units):super().__init__()self.weight = nn.Parameter(torch.randn(in_units, units))self.bias   = nn.Parameter(torch.randn(units))def forward(self, X):return torch.matmul(X, self.weight) + self.bias

6. 模型讀寫

6.1 如何保存與加載模型參數?
  • 保存
torch.save(net.state_dict(), 'mlp.params')
  • 加載
clone = MLP()
clone.load_state_dict(torch.load('mlp.params'))
6.2 如何保存/加載完整張量或張量字典?
torch.save({'x': x, 'y': y}, 'tensor_dict.pt')
data = torch.load('tensor_dict.pt')

7. GPU 計算

7.1 如何查看可用 GPU?
torch.cuda.device_count()          # GPU 數量
torch.device('cuda:0')             # 第0塊 GPU
7.2 如何將張量與模型移至 GPU?
  • 張量
X = torch.ones(2, 3, device='cuda:0')
  • 模型
net = nn.Sequential(nn.Linear(3, 1))
net.to('cuda:0')
7.3 跨 GPU 注意事項
  • 必須保證參與運算的數據在同一設備上
X_on1 = X.cuda(1)   # 復制到 GPU1
Y_on1 = Y.cuda(1)
Z = X_on1 + Y_on1
  • 減少 CPU?GPU 拷貝次數以避免性能瓶頸

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

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

相關文章

智慧工廠煙霧檢測:全場景覆蓋與精準防控

智慧工廠煙霧檢測:構建工業安全的智能防線(所有圖片均為真實項目案例)在工業4.0時代,智慧工廠通過物聯網、人工智能與大數據技術的深度融合,實現了生產流程的數字化與智能化。然而,工廠環境中的火災隱患始終…

@JsonIgnoreProperties注解詳解

JsonIgnoreProperties是 Jackson 庫中的一個重要注解,用于在 JSON 序列化(對象轉 JSON)和反序列化(JSON 轉對象)過程中??控制屬性的可見性??。它提供了更高級別的屬性忽略能力,特別適合處理復雜場景。一…

紅酒數據集預處理實戰:缺失值處理的 5 種打開方式,從入門到進階一步到位

在數據分析與建模流程中,缺失值處理是數據預處理階段的關鍵步驟,直接影響后續模型的準確性與穩定性。本文以紅酒數據集為研究對象,詳細介紹如何通過基礎統計方法(均值、中位數、眾數)、完整案例分析(CCA&am…

Node.js 開發 JavaScript SDK 包的完整指南(AI)

一、核心概念SDK 包定義 專為特定服務/平臺封裝的工具庫,提供標準化 API 調用、錯誤處理、類型聲明等功能。示例:支付寶 SDK、AWS SDK、微信小程序 SDK。技術棧選擇 語言:JavaScript/TypeScript(推薦 TS,便于類型提示&…

Redis實戰-基于Session實現分布式登錄

1.流程分析1.1發送短信驗證碼提交手機號的時候要進行校驗手機號,校驗成功才會去生成驗證碼,將驗證碼保存到session,發生他把這部分那。1.2短信驗證碼登錄/注冊如果提交手機號和驗證碼之后,校驗一致才進行根據手機號查詢用戶&#…

瘋狂星期四文案網第47天運營日記

網站運營第47天,點擊觀站: 瘋狂星期四 crazy-thursday.com 全網最全的瘋狂星期四文案網站 運營報告 今日訪問量 今日搜索引擎收錄情況 必應現在是邊收錄邊k頁面 百度快倒閉 網站優化點 完善工作流,全面實現文案自動化采集,se…

Vue生命周期以及自定義鉤子和路由

Vue生命周期常用的onMounted掛載后執行和onUnmounted卸載前以及onupdated更新后實際上用react對比就是useEffect&#xff0c;而且掛載順序也是子組件先于父組件然后往外的棧結構&#xff0c;先進后出。1.Vue的生命周期<template><h2>當前求和為{{ sum }}</h2>…

探索Thompson Shell:Unix初代Shell的智慧

引言 在計算機科學的漫漫長河中&#xff0c;Thompson Shell 無疑占據著舉足輕重的開創性地位&#xff0c;它是 Unix 系統的第一個 shell&#xff0c;誕生于 1971 年&#xff0c;由計算機領域的傳奇人物 Ken Thompson 開發。在那個計算機技術剛剛起步、硬件資源極度匱乏的年代&a…

MySQL B+ 樹索引詳解:從原理到實戰優化

引言在現代數據庫應用中&#xff0c;查詢效率是影響系統性能的關鍵因素之一。而索引&#xff0c;尤其是 B 樹索引&#xff0c;是 MySQL 中最常用、最重要的性能優化手段。正確使用索引可以將查詢時間從毫秒級降低到微秒級&#xff0c;極大地提升應用響應速度。1. B 樹索引的重要…

計算機內存中的整型存儲奧秘、大小端字節序及其判斷方法

目錄 一、回顧與引入&#xff1a;整數在內存中的存儲方式 為什么要采用補碼存儲&#xff1f; 二、大小端字節序及其判斷方法 1、什么是大小端&#xff1f; 2、為什么存在大小端&#xff1f; 3、練習 練習1&#xff1a;簡述大小端概念并設計判斷程序&#xff08;百度面試…

Redis 最常用的 5 種數據類型

Redis 支持多種靈活的數據類型&#xff0c;每種類型針對特定場景優化。以下是 **Redis 最常用的 5 種數據類型**及其核心特點和應用場景&#xff1a;1. 字符串&#xff08;String&#xff09;描述&#xff1a;最基本的數據類型&#xff0c;可存儲文本、數字&#xff08;整數/浮…

【嵌入式】RK3588 對比 NVIDIA Jetson,Radxa Rock 5B vs Orange Pi 5 Max

RK3588這個芯片,適合AI應用么,為什么這么貴呢 AI 邊緣盒子里的旗艦芯 深度分析一下 RK3588(瑞芯微 Rockchip RK3588) 為什么被很多人關注在 AI 應用,以及它價格偏高的原因。 ?? 1. RK3588 的基本情況 制程:8nm(Samsung 8nm LP) CPU:8 核 big.LITTLE 架構(4 Cortex-…

暴雨讓高性能計算更“冷靜”

當AI大模型的參數突破萬億&#xff0c;當深地探測的精度邁向微米&#xff0c;當數字經濟的脈搏與千行百業深度共振&#xff0c;算力已成為驅動時代向前的核心引擎。然而&#xff0c;傳統風冷技術在高密度算力需求面前漸顯乏力——機柜內的熱浪如同無形的枷鎖&#xff0c;既制約…

SpringAI集成MCP

文章目錄1_調用公用MCP2_Stdio方式3_Stdio實現原理4_SSE方式5_自定義MCP客戶端6_MCP Server權限控制SpringAI 通過 SpringBoot 集成擴展了 MCP Java SDK &#xff0c;提供了客戶端和服務端 starter&#xff0c;讓 AI 應用程序快速支持 MCP。接下來直接演示。 1_調用公用MCP 在…

Spring Start Here 讀書筆記:第10章 Implementing REST services

REST 服務可用于實現兩個應用之間的通訊&#xff0c;包括 Web 應用中的客戶端和服務器之間&#xff0c;移動應用與后端服務之間&#xff0c;或兩個后端服務之間。 10.1 使用 REST 服務在應用之間交換數據 REST端點是應用程序通過 Web 協議公開服務的方式&#xff0c;因此也稱…

SYBASE ASE、Oracle、MySQL/MariaDB、SQL Server及PostgreSQL在郵件/短信發送功能上的全面橫向對比報告

以下是對SYBASE ASE、Oracle、MySQL/MariaDB、SQL Server及PostgreSQL在郵件/短信發送功能上的全面橫向對比報告&#xff08;截至2025年8月最新版本&#xff09;&#xff0c;涵蓋技術實現、配置復雜度、適用場景及權威評測&#xff1a;??一、郵件發送能力對比????1. Orac…

服務器與客戶端

目錄 一、服務器&#xff08;Server&#xff09; 核心特點 常見類型 二、客戶端&#xff08;Client&#xff09; 核心特點 常見類型 客戶端與服務器的交互流程 補充&#xff1a;與 “對等網絡&#xff08;P2P&#xff09;” 的區別 C/S模式 一、C/S 模式的核心原理 …

GaussDB 并發自治事務數達到最大值處理案例

1 業務背景自治事務&#xff08;Autonomous Transactions&#xff09;是一種高級特性&#xff0c;允許你在一個事務中執行另一個獨立的事務。這種機制特別有用&#xff0c;尤其是在需要在一個事務中執行多個操作但又不想因為其中一個操作失敗而影響整個事務的場景。2 業務影響在…

【傳奇開心果系列】Flet分頁自定義組件CustomPaginationComponent封裝版自定義模板

Flet分頁自定義組件CustomPaginationComponent封裝版自定義模板一、效果展示GIF動圖二、應用場景三、特色說明四、源碼下載地址一、效果展示GIF動圖 二、應用場景 圖片瀏覽應用&#xff1a; 用戶可以通過分頁組件瀏覽多張圖片&#xff0c;每點擊一次“上一頁”或“下一頁”按鈕…

數據安全——39頁解讀數字化轉型大數據安全基礎培訓方案【附全文閱讀】

適應人群為企業數據安全管理人員、IT 運維人員、數字化轉型決策者、網絡安全工程師及關注大數據安全的從業人員。主要內容圍繞數字化轉型中大數據安全展開,核心包括基礎概念(信息、數據與大數據的定義及區別,大數據 4V 特點與來源);安全風險(企業面臨的數據資產管理缺失、…