打卡第48天:隨機函數與廣播機制

知識點回顧:

  1. 隨機張量的生成:torch.randn函數
  2. 卷積和池化的計算公式(可以不掌握,會自動計算的)
  3. pytorch的廣播機制:加法和乘法的廣播機制
    ps:numpy運算也有類似的廣播機制,基本一致

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

torch.randn函數

import torch
# 生成標量(0維張量)
scalar = torch.randn(())
print(f"標量: {scalar}, 形狀: {scalar.shape}")  
# 生成向量(1維張量)
vector = torch.randn(5)  # 長度為5的向量
print(f"向量: {vector}, 形狀: {vector.shape}")  
# 生成矩陣(2維張量)
matrix = torch.randn(3, 4)  # 3行4列的矩陣
print(f"矩陣:{matrix},矩陣形狀: {matrix.shape}")  
# 生成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])

其他隨機函數

x = torch.rand(3, 2)  # 生成3x2的張量
print(f"均勻分布隨機數: {x}, 形狀: {x.shape}")x = torch.randint(low=0, high=10, size=(3,))  # 生成3個0到9之間的整數
print(f"隨機整數: {x}, 形狀: {x.shape}")mean = torch.tensor([0.0, 0.0])
std = torch.tensor([1.0, 2.0])
x = torch.normal(mean, std)  # 生成兩個正態分布隨機數
print(f"正態分布隨機數: {x}, 形狀: {x.shape}")# 一維張量與二維張量相加
a = torch.tensor([[1, 2, 3], [4, 5, 6]])  # 形狀: (2, 3)
b = torch.tensor([10, 20, 30])             # 形狀: (3,)# 廣播后:b被擴展為[[10, 20, 30], [10, 20, 30]]
result = a + b  
result

輸出維度測試

import torch
import torch.nn as nn# 生成輸入張量 (批量大小, 通道數, 高度, 寬度)
input_tensor = torch.randn(1, 3, 32, 32)  # 例如CIFAR-10圖像
print(f"輸入尺寸: {input_tensor.shape}")  # 輸出: [1, 3, 32, 32]# 1. 卷積層操作
conv1 = nn.Conv2d(in_channels=3,        # 輸入通道數out_channels=16,      # 輸出通道數(卷積核數量)kernel_size=3,        # 卷積核大小stride=1,             # 步長padding=1             # 填充
)
conv_output = conv1(input_tensor) # 由于 padding=1 且 stride=1,空間尺寸保持不變
print(f"卷積后尺寸: {conv_output.shape}")  # 輸出: [1, 16, 32, 32]# 2. 池化層操作 (減小空間尺寸)
pool = nn.MaxPool2d(kernel_size=2, stride=2) # 創建一個最大池化層
pool_output = pool(conv_output)
print(f"池化后尺寸: {pool_output.shape}")  # 輸出: [1, 16, 16, 16]# 3. 將多維張量展平為向量
flattened = pool_output.view(pool_output.size(0), -1)
print(f"展平后尺寸: {flattened.shape}")  # 輸出: [1, 4096] (16*16*16=4096)
# 4. 線性層操作
fc1 = nn.Linear(in_features=4096,     # 輸入特征數out_features=128      # 輸出特征數
)
fc_output = fc1(flattened)
print(f"線性層后尺寸: {fc_output.shape}")  # 輸出: [1, 128]# 5. 再經過一個線性層(例如分類器)
fc2 = nn.Linear(128, 10)  # 假設是10分類問題
final_output = fc2(fc_output)
print(f"最終輸出尺寸: {final_output.shape}")  # 輸出: [1, 10]
print(final_output)# 使用Softmax替代Sigmoid
softmax = nn.Softmax(dim=1)  # 在類別維度上進行Softmax
class_probs = softmax(final_output)
print(f"Softmax輸出: {class_probs}")  # 總和為1的概率分布
print(f"Softmax輸出總和: {class_probs.sum():.4f}")

廣播機制的概念

廣播機制(Broadcasting)是深度學習框架(如NumPy、PyTorch、TensorFlow)中處理不同形狀數組運算的一種規則。它允許在逐元素操作中自動擴展較小數組的形狀,使其與較大數組匹配,從而避免顯式復制數據。

廣播的核心規則

形狀對齊:從末尾維度開始比較,兩個數組的維度必須滿足以下條件之一:

  • 相等
  • 其中一方為1
  • 其中一方缺失該維度

擴展補全:滿足對齊條件后,數值會沿長度為1的維度復制擴展。

廣播的示例

假設有一個3×4的矩陣 A 和一個長度為4的向量 B

  • A 的形狀:(3, 4)
  • B 的形狀:(4,) → 自動補齊為 (1, 4) → 再擴展為 (3, 4)
    此時 A + B 會逐元素相加。

應用場景

  • 矩陣與向量相加(如偏置項)
  • 不同維度的張量相乘(如注意力機制中的縮放)
  • 數據歸一化時減去均值(形狀自動匹配)

常見限制

若形狀無法對齊(如3×4矩陣與3×1矩陣相加),會觸發錯誤。需手動調整維度(如使用 reshapeunsqueeze)。

廣播機制顯著提升了代碼簡潔性和計算效率,但需注意隱性內存消耗。

維度擴展的規則通常涉及數學、數據科學、機器學習等領域,具體規則取決于應用場景和目標。以下是常見的維度擴展方法和規則:

維度擴展的常見方法

多項式特征擴展
通過生成原始特征的高階組合(如平方、交叉項)來增加維度。例如,原始特征為 (x_1, x_2),擴展后可包含 (x_1^2, x_2^2, x_1x_2)。

核方法(Kernel Methods)
利用核函數將低維數據映射到高維空間,如徑向基函數(RBF)核或多項式核,無需顯式計算高維特征。

嵌入學習(Embedding)
通過模型(如Word2Vec、BERT)將離散特征(如文本、類別)轉換為連續的高維向量。

離散化與分箱(Binning)
將連續特征劃分為多個區間(如年齡分組),生成啞變量(One-Hot編碼)以擴展維度。

注意:

維度災難(Curse of Dimensionality)
過度擴展可能導致數據稀疏性增加,模型性能下降。需平衡維度與樣本量。

特征相關性
擴展的特征應與目標變量存在潛在關聯,避免無效擴展。可通過特征選擇方法篩選。

計算效率
高維數據可能顯著增加計算成本,需考慮稀疏存儲或分布式計算優化。

具體方法的選擇需結合問題類型(如分類、回歸)和數據特性(如數值、文本)。

@浙大疏錦行?

?

?

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

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

相關文章

學習昇騰開發的第四天--基本指令

1、查看npu當前狀態信息 npu-smi info 2、查看NPU的ID npu-smi info -l3、調用python python3 4、修改用戶名 su - HwHiAiUser 5、查看cann版本 cat /usr/local/Ascend/ascend-toolkit/latest/compiler/version.info 6、刪除文件夾 sudo rm -rf HelloWorld7、在本地環…

vue3 - 自定義hook

自定義hook 簡單點來說就是將人物或者訂單的所有數據和方法放在一個ts文件里面 這樣便于維護 假如一個人只需要管 人物的模塊 那他只需要操作usePerson.ts文件就可以了 //useDog.ts import { ref,reactive} from vue; import axios from axios;export default function(){…

【python】bash: !‘: event not found

報錯 # 2. 測試smplx是否工作(可能不需要chumpy) python -c "import smplx; print(? smplx works!)"bash: !: event not found 分析 這是bash的歷史擴展問題,感嘆號被解釋為歷史命令。用這些方法解決: &#x1f680…

【Python打卡Day47】注意力熱力圖可視化@浙大疏錦行

可視化空間注意力熱力圖的意義: 提升模型可解釋性 熱力圖能直觀展示模型決策的依據區域,破除深度學習"黑箱"困境。例如在圖像識別中,可以看到模型識別"貓"是因為關注了貓耳和胡須區域,識別"禁止通行&qu…

樹狀數組 2

L - 樹狀數組 2 洛谷 - P3368 Description 如題,已知一個數列,你需要進行下面兩種操作: 將某區間每一個數加上 x; 求出某一個數的值。 Input 第一行包含兩個整數 N、M,分別表示該數列數字的個數和操作的總個數。…

YOLOv2 技術詳解:目標檢測的又一次飛躍

🧠 YOLOv2 技術詳解:目標檢測的又一次飛躍 一、前言 在 YOLOv1 提出后,雖然實現了“實時性 單階段”的突破,但其在精度和小物體檢測方面仍有明顯不足。為了彌補這些缺陷,Joseph Redmon 等人在 2017 年提出了 YOLOv2…

JAFAR Jack up Any Feature at Any Resolution

GitHub PaPer JAFAR: Jack up Any Feature at Any Resolution 摘要 基礎視覺編碼器已成為各種密集視覺任務的核心組件。然而,它們的低分辨率空間特征輸出需要特征上采樣以產生下游任務所需的高分辨率模式。在這項工作中,我們介紹了 JAFAR——一種輕量級…

SamWaf 開源輕量級網站防火墻源碼(源碼下載)

SamWaf網站防火墻是一款適用于小公司、工作室和個人網站的開源輕量級網站防火墻,完全私有化部署,數據加密且僅保存本地,一鍵啟動,支持Linux,Windows 64位,Arm64。 主要功能: 代碼完全開源 支持私有化部署…

79Qt窗口_QDockWidget的基本使用

目錄 4.1 浮動窗?的創建 4.2 設置停靠的位置 浮動窗? 在 Qt 中,浮動窗?也稱之為鉚接部件。浮動窗?是通過 QDockWidget類 來實現浮動的功能。浮動窗 ??般是位于核?部件的周圍,可以有多個。 4.1 浮動窗?的創建 浮動窗?的創建是通過 QDockWidget…

UE/Unity/Webgl云渲染推流網址,如何與外部網頁嵌套和交互?

需求分析:用threejs開發的數字孿生模型, 但是通過webgl技術網頁中使用,因為模型數據量大,加載比較慢,且需要和其他的業務系統進行網頁嵌套和交互,使用云渲染技術形成的推流網址,如何與外部網頁嵌…

在Termux中搭建完整Python環境(Ubuntu+Miniconda)

蹲坑也能寫python? ?? 環境準備?? 詳細搭建步驟步驟1:安裝Linux容器工具步驟2:查看可用Linux發行版步驟3:安裝Ubuntu系統步驟4:登錄Ubuntu環境步驟5:下載Miniconda安裝包步驟6:安裝Miniconda? 環境驗證?? 使用技巧?? 注意事項前言:想在吃飯、通勤甚至休息間隙…

EventSourcing.NetCore:基于事件溯源模式的 .NET Core 庫

在現代軟件架構中,事件溯源(Event Sourcing)已經成為一種非常流行的模式,尤其適用于需要高可用性和數據一致性的場景。EventSourcing.NetCore 是一個基于事件溯源模式的 .NET Core 庫,旨在幫助開發者更加高效地實現這一…

Linux下的第一個程序——進度條(命令行版本)

文章目錄 編寫Linux下的第一個小程序——進度條進度條的樣式前置知識回車和換行緩沖區對回車、換行、緩沖區、輸出的測試代碼簡單的測試樣例倒計時程序 進度條程序理論版本基本框架代碼實現 真實版本基礎框架 代碼實現 編寫Linux下的第一個小程序——進度條 在前面的基礎開發工…

【項目】仿muduo庫one thread one loop式并發服務器前置知識準備

📚 博主的專欄 🐧 Linux | 🖥? C | 📊 數據結構 | 💡C 算法 | 🅒 C 語言 | 🌐 計算機網絡 |🗃? mysql 本文介紹了一種基于muduo庫實現的主從Reactor模型高并發服務器框架…

steam報網絡錯誤,但電腦是網絡連接的

steam報網絡錯誤,但電腦是網絡連接的 如: 解決辦法: 關閉電腦防火墻和所有殺毒軟件,然后重新打開steam開代理,可能國內有時候訪問不了 首選1進行嘗試 steam安裝路徑一定要在純英文路徑下 已ok

Vue 組合式 API 與 選項式 API 全面對比教程

一、前言:Vue 的兩種 API 風格 Vue 提供了兩種編寫組件邏輯的方式:組合式 API (Composition API) 和 選項式 API (Options API)。理解這兩種方式的區別和適用場景,對于 Vue 開發者至關重要。 為什么會有兩種 API? 選項式 API&a…

HarmonyOS 應用模塊化設計 - 面試核心知識點

HarmonyOS 應用模塊化設計 - 面試核心知識點 在 HarmonyOS 開發面試中,模塊化設計是必考知識點。本文從面試官角度深度解析 HarmonyOS 應用模塊化設計,涵蓋 HAP、HAR、HSP 等核心概念,助你輕松應對技術面試! 🎯 面試高…

Maven高級學習筆記

分模塊設計 為什么分模塊設計?將項目按照功能拆分成若干個子模塊,方便項目的管理維護、擴展,也方便模塊間的相互調用,資源共享。 注意事項:分模塊開發需要先針對模塊功能進行設計,再進行編碼。不會先將工程開發完畢&…

[創業之路-423]:經濟學 - 大國競爭格局下的多維博弈與科技核心地位

在當今風云變幻的國際舞臺上,大國競爭已成為時代的主旋律,其激烈程度與復雜性遠超以往。這場全方位的較量,涵蓋了制度、思想、文化、經濟、科技、軍事等諸多關鍵領域,每一個維度都深刻影響著大國的興衰成敗,而科技在其…

【企業容災災備系統規劃】

一、企業災備體系 1.1 災備體系 災備切換的困境: 容災領域的標準化方法和流程、算法體系是確保業務連續性和數據可靠性的核心,以下從標準框架、流程規范、算法體系三個維度進行系統分析: 1.1.1、標準化方法體系? ?1. 容災等級標準? ?國際標準SHARE78?: 將容災能力劃…