深度學習基礎2

5.張量索引操作

(1)索引操作

  • 行列索引
  • 列表索引
print(data[[0, 2], [1, 2]]) #返回(0, 1),(2, 2)兩個位置的元素print(data[[[0], [1]], [1, 2]]) # 返回0,1行的1,2列共4個元素
  • 范圍索引
print(data[:3, :2]) # 前3行前2列數據print(data[2:, :2]) # 第2行到最后的前2列數據
  • 布爾索引
tensor([[0, 7, 6, 5, 9],[6, 8, 3, 1, 0],[6, 3, 8, 7, 3],[4, 9, 5, 3, 1]])
print(data[data[:, 2] > 5])
print(data[:, data[1] > 5])
輸出結果:
tensor([[0, 7, 6, 5, 9],[6, 3, 8, 7, 3]])tensor([[0, 7],[6, 8],[6, 3],[4, 9]])
  • 多維索引
data = torch.randint(0, 10, [3, 4, 5])
print(data)
#獲取0軸上的第一個數據
print(data[0, :, :])# 獲取1軸上的第一個數據
print(data[:, 0, :])# 獲取2軸上的第一個數據
print(data[:, :, 0])

6.張量形狀操作

(1)reshape函數

import torchdata = torch.tensor([[10, 20, 30], [40, 50, 60]])# 1.使用shape屬性或者size方法都可以獲得張量的形狀
print(data.shape, data.shape[0], data.shape[1])
print(data.size(), data.size(0), data.size(1))# 2.使用reshape函數修改張量形狀
new_data = data.reshape(1, 6)
print(new_data.shape)

(2)squeeze()unsqueeze()函數

  • squeeze函數刪除形狀為1的維度(降維),unsqueeze函數添加形狀為1的維度(升維)
import torchtorch.random.manual_seed(22)
data = torch.randint(0, 10, [3, 4, 5])# 添加維度
data1 = data.unsqueeze(dim = 1).unsqueeze(dim = -1)
print(data1.shape)# 降低維度
print(data1.squeeze().shape)
輸出結果:
torch.Size([3, 1, 4, 5, 1])
torch.Size([3, 4, 5])

(3)transpose()permute()函數

  • transpose函數可以實現交換張量形狀的指定維度;permute函數可以一次交換更多的維度
import torchtorch.random.manual_seed(22)
data = torch.randint(0, 10, [4, 2, 3, 5])
print(data.shape)# 轉換成[3, 4, 5, 2]
data1 = torch.transpose(data, 0, 2)
data2 = torch.transpose(data1, 1, 2)
data3 = torch.transpose(data2, 2, 3)
print(data3.shape)data4 = torch.permute(data, [2, 0, 3, 1])
print(data4.shape)print(data.permute([2, 0, 3, 1]).shape)
輸出結果:
torch.Size([4, 2, 3, 5])
torch.Size([3, 4, 5, 2])
torch.Size([3, 4, 5, 2])
torch.Size([3, 4, 5, 2])  

(4)view()和contiguous()函數

  • view函數也可以用于修改張量的形狀,只能用于存儲在整塊內存中的張量

  • 一個張量經過了transpose或者permute函數的處理之后,就無法使用view函數進行形狀操作,如果要使用view函數,需要使用contiguous()變得連續以后再使用view函數

import torchtorch.random.manual_seed(22)
data = torch.randint(0, 10, [2, 3])
print(data.shape)# 判斷內存是否連續
print(data.is_contiguous())print(data.view(-1).shape)data1 = torch.transpose(data, 0, 1)
print(data1.is_contiguous()) # 內存不連續data2 = data1.contiguous()
print(data2.view(-1).shape)if data.is_contiguous():data.view(-1)
else:data.contiguous().view(-1)
輸出結果:
torch.Size([2, 3])
True
torch.Size([6])
False
torch.Size([6])

7.張量拼接操作

  • torch.cat():可以將兩個張量根據指定的維度拼接起來,不改變維度數
import torch
data1 = torch.randint(0, 10, [1, 2, 3])
data2 = torch.randint(0, 10, [1, 2, 3])
print(data1)
print(data2)# 1.按0維度拼接
new_data1 = torch.cat([data1, data2], dim = 0)
# print(new_data1)
print(new_data1.shape)# 2.按1維度拼接
new_data2 = torch.cat([data1, data2], dim = 1)
# print(new_data2)
print(new_data2.shape)# 3.按2維度拼接
new_data3 = torch.cat([data1, data2], dim = 2)
# print(new_data3)
print(new_data3.shape)
輸出結果:
tensor([[[5, 1, 8],[8, 9, 5]]])
tensor([[[5, 2, 9],[0, 5, 6]]])
torch.Size([2, 2, 3])
torch.Size([1, 4, 3])
torch.Size([1, 2, 6])

8.自動微分模塊

  • 訓練神經網絡時,最常用的算法就是反向傳播。在該算法中,參數(模型權重)會根據損失函數關于對應參數的梯度進行調整。為了計算這些梯度,pytorch內置了名為torch.autograd的微分引擎,它支持任意計算圖的自動梯度計算
"""w = w - L(w.grad)"""
import torch# 數據  特征+目標
x = torch.tensor(5)
y = torch.tensor(0.)# 權重  偏置
w = torch.tensor(1, requires_grad=True,dtype = torch.float32)
b = torch.tensor(3, requires_grad=True, dtype = torch.float32)# 預測
z = w*x + b# 損失
loss = torch.nn.MSELoss()
loss = loss(z, y)# 微分
loss.backward()#梯度
print(w.grad)
print(b.grad)
輸出結果:
tensor(80.)
tensor(16.)
import torchx = torch.ones(2, 5)
y = torch.zeros(2, 3)w = torch.randn(5, 3, requires_grad=True)
b = torch.randn(3, requires_grad=True)z = torch.matmul(x, w) + bloss = torch.nn.MSELoss()
loss = loss(z, y)loss.backward()print(w.grad)
print(b.grad)
輸出結果:
tensor([[0.2782, 1.4126, 0.4037],[0.2782, 1.4126, 0.4037],[0.2782, 1.4126, 0.4037],[0.2782, 1.4126, 0.4037],[0.2782, 1.4126, 0.4037]])
tensor([0.2782, 1.4126, 0.4037])

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

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

相關文章

Web安全:CSRF的攻擊原理與防御措施

什么是 CSRF? CSRF(Cross-Site Request Forgery,跨站請求偽造)是一種利用 瀏覽器自動攜帶 Cookie 的機制,誘騙用戶在已登錄目標網站的情況下,執行惡意操作的攻擊方式。 攻擊核心特點: 攻擊者 不…

學習記錄2025

1、Cmake相關 cmake -S . -B build -S . 表示CMakeLists.txt在哪個目錄 -B build CMake生成結果在哪個路徑 build就是路徑名 簡短 cmake -B build 或進入build 文件夾下 cmake cmake --build build 在build文件夾下編譯 常量:CMAKE_CURRENT_LIST_DIR CMAKE…

GIT操作 學習

登錄gitee登錄方式:通過網站登錄,使用注冊時的賬號(通常是手機號)和密碼進行認證創建倉庫 新建倉庫步驟命名規范:倉庫名稱應盡量符合規范,避免與已有倉庫沖突,建議使用有意義的命名…

[論文精讀]StruQ: Defending Against Prompt Injection with Structured Queries

StruQ: Defending Against Prompt Injection with Structured Queries [2402.06363] StruQ: Defending Against Prompt Injection with Structured Queries usenix security 2025 提示注入攻擊是一個重要的威脅:它們誘使模型偏離原始應用程序的指令,轉…

磁懸浮軸承的反饋線性化:非線性控制的智能解耦之道

摘要:磁懸浮軸承憑借無摩擦、高速度、長壽命等優勢,成為高速旋轉機械的理想支撐方案。然而,其本質非線性與強耦合特性使得傳統線性控制方法難以滿足高性能要求。本文深入解析反饋線性化技術如何精確解除磁懸浮系統的非線性耦合,揭示其從微分幾何理論到工程實現的核心路徑,…

探尋《答案之書》:在隨機中尋找生活的指引

我強烈推薦4本可以改變命運的經典著作: 《壽康寶鑒》在線閱讀白話文《欲海回狂》在線閱讀白話文《陰律無情》在線閱讀白話文《了凡四訓》在線閱讀白話文 在快節奏的現代生活中,人們常常面臨各種困惑與抉擇。當常規的思考與決策方式無法帶來清晰答案時&am…

【PTA數據結構 | C語言版】計算1~n平方的和加上1~n的和

本專欄持續輸出數據結構題目集,歡迎訂閱。 文章目錄 題目代碼 題目 給定正整數 n,請編寫程序,求 (12?n^2 )(12?n) 的值。 輸入格式: 輸入在一行中給出正整數 n(≤100)。 輸出格式: 在一行中…

Assistant API的原理及應用

🧠 什么是 Assistants API? 📅 **發布日期:**2023年11月6日,OpenAI在開發者大會上發布了 Assistants API —— 一款面向開發者的工具,用于在應用中構建 AI 助手。 ? 它可以做什么? Assistants …

《北京市加快推動“人工智能+醫藥健康“創新發展行動計劃(2025-2027年)》深度解讀

引言 隨著新一輪科技革命和產業變革的深入推進,人工智能技術與醫藥健康的深度融合已成為全球科技創新的重要方向。北京市于2025年7月正式發布《北京市加快推動"人工智能+醫藥健康"創新發展行動計劃(2025-2027年)》,旨在充分發揮北京在人工智能技術策源、頭部醫療…

DPDK 關于 IOMMU 設置

一、IOMMU 基礎概念 定義:IOMMU(Input/Output Memory Management Unit)即輸入 / 輸出內存管理單元,它是一種硬件機制,用于將設備發出的內存訪問請求進行地址轉換。在現代計算機系統中,它在設備與內存之間起到橋梁作用,提供內存保護和設備隔離功能。作用: 內存保護:防止…

pg_class 系統表信息

SELECT c.relname, c.relkind, CASE WHEN c.relkind r THEN 普通表 WHEN c.relkind p THEN 分區表 WHEN c.relkind f THEN 外表 WHEN c.relkind v THEN 視圖 WHEN c.relkind m THEN 物化視圖 ELSE 其他 END as table_type_desc FROM pg_class c JOIN pg_namespace …

【C++開源庫使用】使用libcurl開源庫發送url請求(http請求)去下載用戶頭像文件(附完整源碼)

目錄 1、libcurl介紹 2、libcurl庫源碼下載與編譯 3、調用libcurl庫的API接口實現http/https請求發送,實現頭像文件下載 4、發送圖片url下載圖片文件的完整代碼展示 5、使用libcurl發送https請求時可能會遇到的兩個錯誤 在某SDK項目中,第三方…

在Docker容器中更改,保存為新的鏡像

# 1. 進入原始容器 docker run -it --name mydev ubuntu:20.04 /bin/bash# 2. 在容器內做大量修改 apt update && apt install -y python3 mkdir /app && echo print("Hello from modified container") > /app/app.py# 3. 退出容器 exit# 4. 保存…

【網絡與爬蟲 13】智能偽裝:Scrapy-Fake-UserAgent反檢測技術實戰指南

【網絡與爬蟲 13】智能偽裝:Scrapy-Fake-UserAgent反檢測技術實戰指南 關鍵詞:Scrapy-Fake-UserAgent、反爬蟲、智能偽裝、瀏覽器指紋、用戶代理、爬蟲檢測規避、自動更新UA 摘要:本文深入解析Scrapy-Fake-UserAgent庫的工作原理與應用技巧&a…

前端開發常見問題

前端開發常見問題技術文章大綱 引言 簡要介紹前端開發在當前技術環境中的重要性,以及開發者常遇到的挑戰和痛點。 瀏覽器兼容性問題 不同瀏覽器對CSS、JavaScript的支持差異常見的Polyfill和轉譯工具(如Babel、PostCSS)如何利用Can I Use…

文心開源大模型ERNIE-4.5-0.3B-Paddle私有化部署保姆級教程及技術架構探索

一起來輕松玩轉文心大模型吧👉一文心大模型免費下載地址: https://ai.gitcode.com/theme/1939325484087291906 前言 2025年6月30日,百度正式開源文心大模型4.5系列(ERNIE 4.5),涵蓋10款不同參數規模的模型&#xff0…

【操作系統】內存管理

要求: 1、在該實驗中,采用可變分區方式完成對存儲空間的管理(即存儲空間的分配與回收工作)。 2、設計用來記錄主存使用情況的數據結構:已分區表和空閑分區表。 3、在設計好的數據結構上設計一個主存分配算法&#xff0…

【算法筆記】5.LeetCode-Hot100-矩陣專項

1. 矩陣置零(t73) 中等難度,題目示例如下: 給定一個 m x n 的矩陣,如果一個元素為 0 ,則將其所在行和列的所有元素都設為 0 。請使用原地算法。示例 1: 輸入:matrix [[1,1,1],[1,0,1],[1,1,1]] 輸出&…

ORACLE 日常查詢

一. 查詢索引相關1. 查詢索引所在的表空間,單個索引的大小SELECT ui.table_name, us.segment_name AS index_name, us.tablespace_name,ROUND(SUM(us.bytes) / 1024 / 1024 / 1024, 2) AS total_size_GB FROM dba_indexes ui JOIN dba_segments us ON ui.index_name…

【DeepSeek實戰】17、MCP地圖服務集成全景指南:高德、百度、騰訊三大平臺接入實戰

引言:為什么MCP是地圖服務的下一代革命? 在數字化時代,位置服務已成為電商、出行、物流等行業的核心基礎設施。但單一地圖服務商的局限性日益凸顯:某外賣平臺因高德地圖API突發故障導致30分鐘訂單配送延遲,某打車軟件因百度地圖路線規劃偏差引發用戶投訴激增,某物流企業…