Python訓練營---DAY48

DAY 48 隨機函數與廣播機制

知識點回顧:

  1. 隨機張量的生成:torch.randn函數
  2. 卷積和池化的計算公式(可以不掌握,會自動計算的)
  3. pytorch的廣播機制:加法和乘法的廣播機制

ps:numpy運算也有類似的廣播機制,基本一致

作業:自己多借助ai舉幾個例子幫助自己理解即可

1、隨機張量的生成:torch.randn函數

# 生成3維張量(常用于圖像數據的通道、高度、寬度)
tensor_3d = torch.randn(3, 224, 224)  # 3通道,高224,寬224
print(f"3維張量形狀: {tensor_3d.shape}")  # 輸出: torch.Size([3, 224, 224])
# 生成4維張量(常用于批量圖像數據:[batch, channel, height, width])
tensor_4d = torch.randn(2, 3, 224, 224)  # 批量大小為2,3通道,高224,寬224
print(f"4維張量形狀: {tensor_4d.shape}")  # 輸出: torch.Size([2, 3, 224, 224])

torch.rand():生成[0,1)范圍內均勻分布的隨機數

x = torch.rand(3, 2)  # 生成3x2的張量
print(f"均勻分布隨機數: {x}, 形狀: {x.shape}")

torch.randint():生成指定范圍內的隨機整數

x = torch.randint(low=0, high=10, size=(3,))  # 生成3個0到9之間的整數
print(f"隨機整數: {x}, 形狀: {x.shape}")

torch.normal():生成指定均值和標準差的正態分布隨機數。

mean = torch.tensor([0.0, 0.0])
std = torch.tensor([1.0, 2.0])
x = torch.normal(mean, std)  # 生成兩個正態分布隨機數
print(f"正態分布隨機數: {x}, 形狀: {x.shape}")

2、卷積和池化的計算公式(可以不掌握,會自動計算的)

3、pytorch的廣播機制:加法和乘法的廣播機制

案例 1:張量 a(3, 1)?與張量 b(3,)
  • 步驟 1:補全維度
    張量的形狀可以理解為 “維度的元組”,為了對齊,先給維度少的張量補 1(在最左側補)?。這里?b?原本是?(3,)(1 維),補全后變成?(1, 3)(2 維),和?a?的維度數(2 維)對齊。
  • 步驟 2:逐維擴展
    對每個維度,若其中一個張量該維度大小為?1,就復制數據擴展到另一張量的維度大小?。a?形狀是?(3, 1)b?補全后是?(1, 3)
    • 第 1 維(行方向):a?是?3b?是?1?→?b?第 1 維擴展為?3(復制自身 3 次)。
    • 第 2 維(列方向):a?是?1b?是?3?→?a?第 2 維擴展為?3(復制自身 3 次)。
      最終兩者都擴展為?(3, 3),就能逐元素運算。
案例 2:張量 a(5, 1, 4)?與張量 b(1, 3, 1)
  • 直接對比每個維度(從右往左):
    • 第 3 維(最右側):a?是?4b?是?1?→ 兼容(1?可擴展)。
    • 第 2 維:a?是?1b?是?3?→ 兼容(1?可擴展)。
    • 第 1 維:a?是?5b?是?1?→ 兼容(1?可擴展)。
  • 擴展后,每個維度取較大值?:第 1 維?5、第 2 維?3、第 3 維?4,最終形狀?(5, 3, 4)?,滿足廣播。
案例 3:張量 a(2, 1, 3, 4)?與張量 b(5, 1, 4)
  • 步驟 1:補全維度
    b?是 3 維,a?是 4 維 → 給?b?最左側補?1,變成?(1, 5, 1, 4)?,和?a?維度數(4 維)對齊。
  • 步驟 2:逐維擴展
    對比每個維度(從右往左):
    • 第 4 維:a?是?4b?是?4?→ 相等,無需擴展。
    • 第 3 維:a?是?3b?是?1?→?b?第 3 維擴展為?3(復制)。
    • 第 2 維:a?是?1b?是?5?→?a?第 2 維擴展為?5(復制)。
    • 第 1 維:a?是?2b?是?1?→?b?第 1 維擴展為?2(復制)。
      最終形狀?(2, 5, 3, 4)?,完成廣播。
3.1加法的廣播機制

二維+一維

import torch# 創建原始張量
a = torch.tensor([[10], [20], [30]])  # 形狀: (3, 1)
b = torch.tensor([1, 2, 3])          # 形狀: (3,)result = a + b
# 廣播過程
# 1. b補全維度: (3,) → (1, 3)
# 2. a擴展列: (3, 1) → (3, 3)
# 3. b擴展行: (1, 3) → (3, 3)
# 最終形狀: (3, 3)print("原始張量a:")
print(a)print("\n原始張量b:")
print(b)print("\n廣播后a的值擴展:")
print(torch.tensor([[10, 10, 10],[20, 20, 20],[30, 30, 30]]))  # 實際內存中未復制,僅邏輯上擴展print("\n廣播后b的值擴展:")
print(torch.tensor([[1, 2, 3],[1, 2, 3],[1, 2, 3]]))  # 實際內存中未復制,僅邏輯上擴展print("\n加法結果:")
print(result)

三維+二維

# 創建原始張量
a = torch.tensor([[[1], [2]], [[3], [4]]])  # 形狀: (2, 2, 1)
b = torch.tensor([[10, 20]])               # 形狀: (1, 2)# 廣播過程
# 1. b補全維度: (1, 2) → (1, 1, 2)
# 2. a擴展第三維: (2, 2, 1) → (2, 2, 2)
# 3. b擴展第一維: (1, 1, 2) → (2, 1, 2)
# 4. b擴展第二維: (2, 1, 2) → (2, 2, 2)
# 最終形狀: (2, 2, 2)result = a + b
print("原始張量a:")
print(a)print("\n原始張量b:")
print(b)print("\n廣播后a的值擴展:")
print(torch.tensor([[[1, 1],[2, 2]],[[3, 3],[4, 4]]]))  # 實際內存中未復制,僅邏輯上擴展print("\n廣播后b的值擴展:")
print(torch.tensor([[[10, 20],[10, 20]],[[10, 20],[10, 20]]]))  # 實際內存中未復制,僅邏輯上擴展print("\n加法結果:")
print(result)

二維+標量

# 創建原始張量
a = torch.tensor([[1, 2], [3, 4]])  # 形狀: (2, 2)
b = 10                              # 標量,形狀視為 ()# 廣播過程
# 1. b補全維度: () → (1, 1)
# 2. b擴展第一維: (1, 1) → (2, 1)
# 3. b擴展第二維: (2, 1) → (2, 2)
# 最終形狀: (2, 2)result = a + b
print("原始張量a:")
print(a)
# 輸出:
# tensor([[1, 2],
#         [3, 4]])print("\n標量b:")
print(b)
# 輸出: 10print("\n廣播后b的值擴展:")
print(torch.tensor([[10, 10],[10, 10]]))  # 實際內存中未復制,僅邏輯上擴展print("\n加法結果:")
print(result)
# 輸出:
# tensor([[11, 12],
#         [13, 14]])

3.2乘法的廣播機制

批量矩陣與單個矩陣相乘

import torch# A: 批量大小為2,每個是3×4的矩陣
A = torch.randn(2, 3, 4)  # 形狀: (2, 3, 4)# B: 單個4×5的矩陣
B = torch.randn(4, 5)     # 形狀: (4, 5)# 廣播過程:
# 1. B補全維度: (4, 5) → (1, 4, 5)
# 2. B擴展第一維: (1, 4, 5) → (2, 4, 5)
# 矩陣乘法: (2, 3, 4) @ (2, 4, 5) → (2, 3, 5)
result = A @ B            # 結果形狀: (2, 3, 5)print("A形狀:", A.shape)  # 輸出: torch.Size([2, 3, 4])
print("B形狀:", B.shape)  # 輸出: torch.Size([4, 5])
print("結果形狀:", result.shape)  # 輸出: torch.Size([2, 3, 5])

批量矩陣與批量矩陣相乘(部分廣播)

# A: 批量大小為3,每個是2×4的矩陣
A = torch.randn(3, 2, 4)  # 形狀: (3, 2, 4)# B: 批量大小為1,每個是4×5的矩陣
B = torch.randn(1, 4, 5)  # 形狀: (1, 4, 5)# 廣播過程:
# B擴展第一維: (1, 4, 5) → (3, 4, 5)
# 矩陣乘法: (3, 2, 4) @ (3, 4, 5) → (3, 2, 5)
result = A @ B            # 結果形狀: (3, 2, 5)print("A形狀:", A.shape)  # 輸出: torch.Size([3, 2, 4])
print("B形狀:", B.shape)  # 輸出: torch.Size([1, 4, 5])
print("結果形狀:", result.shape)  # 輸出: torch.Size([3, 2, 5])

三維張量與二維張量相乘(高維廣播)

# A: 批量大小為2,通道數為3,每個是4×5的矩陣
A = torch.randn(2, 3, 4, 5)  # 形狀: (2, 3, 4, 5)# B: 單個5×6的矩陣
B = torch.randn(5, 6)        # 形狀: (5, 6)# 廣播過程:
# 1. B補全維度: (5, 6) → (1, 1, 5, 6)
# 2. B擴展第一維: (1, 1, 5, 6) → (2, 1, 5, 6)
# 3. B擴展第二維: (2, 1, 5, 6) → (2, 3, 5, 6)
# 矩陣乘法: (2, 3, 4, 5) @ (2, 3, 5, 6) → (2, 3, 4, 6)
result = A @ B               # 結果形狀: (2, 3, 4, 6)print("A形狀:", A.shape)     # 輸出: torch.Size([2, 3, 4, 5])
print("B形狀:", B.shape)     # 輸出: torch.Size([5, 6])
print("結果形狀:", result.shape)  # 輸出: torch.Size([2, 3, 4, 6])

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

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

相關文章

什么是ANSYS ACT? ACT又可以分為哪幾類?

ANSYS作為目前仿真界主流軟件之一,除了給用戶提供其強大的功能之外,還給用戶提供了高度自定義定制的權限。所謂定制,也即用戶可以根據自己仿真需求修改現有功能并展示全新功能的產品內操作。定制的目標是改變現有的用戶體驗,以滿足…

電路圖識圖基礎知識-電動機正反轉控制電路詳解(二十)

1. 轉換開關手動正反轉控制電路 轉換開關(QS)又稱倒順開關,是一種手動控制裝置,可切換電動機的旋轉方向。它具有三個工作位置:正向、停止和反向。 工作原理: 閉合總電源開關 QS若需正向運轉,將…

Spring Boot微服務架構(十):Docker與K8S部署的區別

Spring Boot微服務在Docker與Kubernetes(K8S)中的部署存在顯著差異,主要體現在技術定位、管理能力、擴展性及適用場景等方面。以下是兩者的核心區別及實踐對比: 一、技術定位與核心功能 Docker 功能:專注于單節點容器化…

性能剖析:在 ABP 框架中集成 MiniProfiler 實現性能可視化診斷

🚀 性能剖析:在 ABP 框架中集成 MiniProfiler 實現性能可視化診斷 📚 目錄 🚀 性能剖析:在 ABP 框架中集成 MiniProfiler 實現性能可視化診斷一、為什么選擇 MiniProfiler? 🧐二、集成 MiniProf…

ESP32 在Arduino開發環境中,如果程序運行報錯如何定位程序報錯是哪行代碼

在開發中,我們常常會遇到編譯正常,但是運行過程中程序報錯,然后重啟,在這種情況下,又沒法知道是哪段程序引起的,現在我們就來解決這個問題。 其實ESP32的SDK中已經附帶這些debug的工具了。 首先如果我們程…

Python 包管理器 uv 介紹

Python 包管理器 uv 全面介紹 uv 是由 Astral(熱門工具 Ruff 的開發者)推出的下一代高性能 Python 包管理器和構建工具,用 Rust 編寫。它旨在解決傳統工具(如 pip、virtualenv、pip-tools)的性能瓶頸,同時…

win10啟動時小鍵盤燈默認不亮怎么辦

第一步,按winR,打開運行。 第二步,輸入regedit,打開注冊表。 第三步,在注冊表編輯器中,依次展開HKEY_ USERS --》.DEFAULT --》Control Panel --》Keyboard , 第四步,選中Keyboard 之后在右側窗…

C盤的“下載”修改位置時出錯了,怎么還原

本來想修改“下載”的位置,結果直接成D盤的快捷鍵了。 正常應該是D盤里面的一個文件夾,而不是D盤。 而且打開D盤,里面的文件夾,全部按照時間分區顯示了,而不是正常的文件顯示。 解決辦法: 1、還原下載路…

量化面試綠皮書:7. 100的階乘中有多少個尾隨零

文中內容僅限技術學習與代碼實踐參考,市場存在不確定性,技術分析需謹慎驗證,不構成任何投資建議。 7. 100的階乘中有多少個尾隨零 Q: 100 ! 100! 100!(100 的階乘)中有多少個尾隨零? A: 100 ! 100! 100…

Java 常用 API 分類總結(算法競賽考前速記篇)- 適用于算法競賽(如 CCF CSP、藍橋杯、NOI)

以下是Java 常用 API 的系統性總結,特別適用于算法競賽(如 CCF CSP、藍橋杯、NOI)場景。按照功能分類,并給出代表性方法及簡要用法說明,方便復習與帶入考場: ? Java 常用 API 分類總結(算法競賽…

重復文件管理 一鍵清理重復 圖片 文檔 免費 超輕量無廣告

各位電腦小衛士們!今天給你們介紹一款超厲害的軟件——ZZYDupFile,它是專門搞重復文件管理的輕量級工具,能幫咱快速找到并清理電腦里的重復文件。接下來我就詳細說說它的那些優點。 軟件下載地址安裝包 首先說說它的核心功能。它查重有好幾…

本地部署企業郵箱,讓企業辦公更安全高效

在當今數字化辦公時代,企業郵箱作為企業溝通協作的重要工具,承載著企業業務往來和辦公協同的重要職能。基于安全性、個性化需求、系統集成等方面的考量,越來越多的企業傾向于選擇本地部署企業郵箱,本地化部署不僅能夠有效守護企業…

基于深度強化學習的智能機器人導航系統

前言 隨著人工智能技術的飛速發展,機器人在日常生活和工業生產中的應用越來越廣泛。其中,機器人導航技術是實現機器人自主移動的關鍵。傳統的導航方法依賴于預設的地圖和路徑規劃算法,但在復雜的動態環境中,這些方法往往難以適應。…

gorm 配置數據庫

介紹 GORM 是 Go 語言中最流行的 ORM(對象關系映射)庫之一,基于數據庫操作的封裝,提供類似 Django ORM / SQLAlchemy 的開發體驗。 特性描述支持多種數據庫MySQL、PostgreSQL、SQLite、SQL Server、ClickHouse 等自動遷移自動根…

k8s4部署

configMap configmap概述:數據會存儲在etcd數據庫,其應用場景主要在應用程序的配置 configmap支持的類型(1)鍵值對(2)多行數據 pod使用configmap資源有兩種常見的方式(1)變量注入&a…

2025HNCTF - Crypto

Crypto lcgp 題目: from Crypto.Util.number import * import gmpy2 import random n getPrime(1024) flag bH&NCTF{ str(uuid.uuid4()).encode() b} flagbytes_to_long(flag) e 2024 cpow(e, flag, n)class LCG:def __init__(self, seed, a, b, m):sel…

Typeerror: cannot read properties of undefined (reading ‘XXX‘)

最近需要在離線機器上運行軟件,所以得把軟件用docker打包起來,大部分功能都沒問題,出了一個奇怪的事情。同樣的代碼,在本機上用vscode可以運行起來,但是打包之后在docker里出現了問題。使用的是dialog組件,…

前后端分離開發 和 前端工程化

來源:黑馬程序員JavaWeb開發教程,實現javaweb企業開發全流程(涵蓋SpringMyBatisSpringMVCSpringBoot等)_嗶哩嗶哩_bilibili 前后端混合開發: 需要使用前端的技術棧開發前端的功能,又需要使用Java的技術棧…

QT線程同步 QReadWriteLock并發訪問

QT多線程專欄共有17篇文章,從初識線程到、QMutex鎖、QSemaphore信號量、Emit、Sgnals、Slot主線程子線程互相傳值同步變量、QWaitCondition、QReadWriteLock、事件循環、QObjects、線程安全、線程同步、線程異步、QThreadPool線程池、ObjectThread多線程操作、 moveToThread等…

【物聯網-ModBus-RTU

物聯網-ModBus-RTU ■ 優秀博主鏈接■ ModBus-RTU介紹■(1)幀結構■(2)查詢功能碼 0x03■(3)修改單個寄存器功能碼 0x06■(4)Modbus RTU 串口收發數據分析 ■ 優秀博主鏈接 Modbus …