Pytorch 筆記

執行下面這段代碼后,為什么返回的是 2 ?

vector = torch.tensor([7, 7])
vector.shape

為什么返回的是 torch.Size([2])

當你創建一個PyTorch張量時,它會記住張量中元素的數量每個維度的大小。在你的代碼中,torch.tensor([7, 7])創建了一個一維張量,其中包含兩個元素:7和7。因為這是一個一維張量,所以.shape屬性返回一個只有一個元素的元組該元素表示張量的長度。在這種情況下,張量的長度為2,因此返回的形狀是torch.Size([2])

tensor 的維度

TENSOR = torch.tensor([[[1, 2, 3],[3, 6, 9],[2, 4, 5]]])
TENSOR.ndim

返回的是 [1,3,3] , 如何判斷?有三層 [ ] 括號,將每個 [ ] 括號視為列表,從最里層起,當前列表有幾個并列的元素,TENSOR.ndim 返回的列表最右邊的元素就是幾,然后去掉最外面一層的 [ ] 括號,繼續判斷當前列表有幾個并列的元素,TENSOR.ndim 返回的列表次右邊的元素就是幾,依次類推。

在這里插入圖片描述

Scalar,Vector,Matrix,Tensor

在這里插入圖片描述

torch.arange()

torch.arange() 返回的是 PyTorch 中的 tensor,而不是 NumPy 數組。

torch中對tensor的各種切片操作

好的,讓我們使用一個三維張量來詳細解釋各種復雜的切片操作。我們首先創建一個形狀為 2 × 3 × 4 2 \times 3 \times 4 2×3×4 的三維張量:

import torch# 創建一個形狀為 2x3x4 的三維張量
tensor = torch.arange(24).reshape(2, 3, 4)
print("Original Tensor:")
print(tensor)

假設我們有一個如下所示的三維張量:

tensor([[[ 0,  1,  2,  3],[ 4,  5,  6,  7],[ 8,  9, 10, 11]],[[12, 13, 14, 15],[16, 17, 18, 19],[20, 21, 22, 23]]])

1. 選擇特定的切片

選擇第一個維度的第一個子張量
slice_1 = tensor[0, :, :]
print("Slice along the first dimension (index 0):")
print(slice_1)

輸出:

tensor([[ 0,  1,  2,  3],[ 4,  5,  6,  7],[ 8,  9, 10, 11]])
選擇第二個維度的第二個子張量
slice_2 = tensor[:, 1, :]
print("Slice along the second dimension (index 1):")
print(slice_2)

輸出:

tensor([[ 4,  5,  6,  7],[16, 17, 18, 19]])
選擇第三個維度的第三個子張量
slice_3 = tensor[:, :, 2]
print("Slice along the third dimension (index 2):")
print(slice_3)

輸出:

tensor([[ 2,  6, 10],[14, 18, 22]])

2. 高級切片操作

選擇第一個維度的第一個子張量中的第1到第2行(不包括第2行)
slice_4 = tensor[0, 0:1, :]
print("Slice along the first dimension (index 0) and rows 0 to 1:")
print(slice_4)

輸出:

tensor([[0, 1, 2, 3]])
選擇第二個維度的第0和第2行,并選擇所有列
slice_5 = tensor[:, [0, 2], :]
print("Select rows 0 and 2 from the second dimension:")
print(slice_5)

輸出:

tensor([[[ 0,  1,  2,  3],[ 8,  9, 10, 11]],[[12, 13, 14, 15],[20, 21, 22, 23]]])
選擇第三個維度的第1和第3列
slice_6 = tensor[:, :, [1, 3]]
print("Select columns 1 and 3 from the third dimension:")
print(slice_6)

輸出:

tensor([[[ 1,  3],[ 5,  7],[ 9, 11]],[[13, 15],[17, 19],[21, 23]]])

3. 使用布爾張量進行索引

選擇大于10的元素
mask = tensor > 10
slice_7 = tensor[mask]
print("Elements greater than 10:")
print(slice_7)

輸出:

tensor([11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23])

4. 使用長整型張量進行索引

選擇第1和第3列的數據
indices = torch.tensor([1, 3])
slice_8 = tensor[:, :, indices]
print("Select columns indexed by [1, 3]:")
print(slice_8)

輸出:

tensor([[[ 1,  3],[ 5,  7],[ 9, 11]],[[13, 15],[17, 19],[21, 23]]])

5. 花式索引

使用多個索引數組
rows = torch.tensor([0, 1])
cols = torch.tensor([2, 3])
slice_9 = tensor[0, rows, cols]
print("Fancy indexing with rows and cols:")
print(slice_9)

輸出:

tensor([2, 7])

通過這些示例,希望你對 PyTorch 中的張量索引和切片操作有了更深入的理解。這些操作在數據預處理、特征提取和神經網絡模型的實現中非常重要。

torch 中 tensor 的各種乘法

在 PyTorch 中,有多種實現張量相乘的方式,每種方式在實現上有一些差異,有些是就地操作,有些不是。以下是幾種主要的實現方式:

1. 元素級相乘 (Element-wise Multiplication)

要求兩個 tensor 的 shape 一致

使用 * 操作符
import torcha = torch.tensor([[1, 2], [3, 4]])
b = torch.tensor([[5, 6], [7, 8]])result = a * b
print(result)
使用 torch.mul()
result = torch.mul(a, b)
print(result)
就地操作

使用 mul_() 方法:

a.mul_(b)
print(a)

2. 矩陣乘法 (Matrix Multiplication)

使用 @ 操作符 (Python 3.5+)
result = a @ b.T  # 轉置 b 以使其形狀匹配矩陣乘法要求
print(result)
使用 torch.matmul()
result = torch.matmul(a, b.T)
print(result)
使用 torch.mm()(僅適用于二維張量)
result = torch.mm(a, b.T)
print(result)

3. 廣義點積 (Dot Product for 1D tensors)

使用 torch.dot()
c = torch.tensor([1, 2, 3])
d = torch.tensor([4, 5, 6])result = torch.dot(c, d)
print(result)

4. 批量矩陣乘法 (Batch Matrix Multiplication)

使用 torch.bmm()
e = torch.randn(10, 3, 4)  # 形狀為 (batch_size, m, n)
f = torch.randn(10, 4, 5)  # 形狀為 (batch_size, n, p)result = torch.bmm(e, f)
print(result)

5. 廣播相乘 (Broadcast Multiplication)

張量會自動廣播到兼容的形狀。

g = torch.tensor([1, 2, 3])
h = torch.tensor([[1], [2], [3]])result = g * h
print(result)

就地操作總結

就地操作會直接修改原始張量的值,通常以 _ 結尾:

  • a.mul_(b):就地進行元素級相乘

非就地操作會創建新的張量并返回結果,而不改變輸入張量的值。

這些不同的乘法操作方式在不同的應用場景中有不同的用途,根據需要選擇適合的乘法方式。

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

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

相關文章

通過 js 調起微信官方的微信支付api

通過 js 調起微信官方的微信支付api function onBridgeReady() {WeixinJSBridge.invoke(getBrandWCPayRequest, { "appId": "wx2421b1c4370ec43b", // 公眾號ID,由商戶傳入 "timeStamp": "1395712654", // 時間戳&quo…

動態插入HTML內容有哪些常見用法

動態插入HTML內容的常見用法包括但不限于以下幾種情況: 用戶交互反饋:當用戶在網頁上進行某些操作時(如點擊按鈕、提交表單等),可以使用JavaScript動態插入HTML內容來提供即時的反饋或結果。例如,當用戶點…

vue3第三十五節(TS 之 泛型)

本節介紹 ts 中泛型的常用情景 1 什么是泛型 泛型的本質是參數化類型&#xff0c;也就是說所操作的數據類型被指定為一個參數。這種參數類型可以用在類、接口和方法的創建中&#xff0c;分別稱為泛型類、泛型接口、泛型方法。 泛型使用<T>來定義類型&#xff0c;<T…

使用canarytokens進行入侵檢測

canarytokens 基本概念 canarytokens是一種用于識別網絡入侵的工具。它們是一種虛擬的“蜜罐”&#xff0c;可以在網絡上放置&#xff0c;當有人嘗試訪問它們時&#xff0c;可以立即觸發警報&#xff0c;以便及時發現潛在的安全威脅。這些token可以是各種形式&#xff0c;可以…

項目管理基礎知識

項目管理基礎知識 導航 文章目錄 項目管理基礎知識導航一、項目相關概念二、時間管理三、人員管理四、風險管理 一、項目相關概念 項目定義的三層意思 一定的資源約束:時間資源、經費資源、人力資源一定的目標一次性任務 里程碑 是項目中的重要時點或事件持續時間為零&…

深度神經網絡——什么是遷移學習?

1.概述 在練習機器學習時&#xff0c;訓練模型可能需要很長時間。從頭開始創建模型架構、訓練模型&#xff0c;然后調整模型需要大量的時間和精力。訓練機器學習模型的一種更有效的方法是使用已經定義的架構&#xff0c;可能具有已經計算出的權重。這是背后的主要思想 遷移學習…

makefile一些特殊且常用的符號

$^&#xff1a;表示所有的依賴文件列表&#xff0c;多個文件以空格分隔。 $&#xff1a;表示目標文件的名稱。 $<&#xff1a;表示第一個依賴文件的名稱。 $*&#xff1a;表示目標文件的主文件名&#xff08;不包括擴展名&#xff09;。 $?&#xff1a;表示所有比目標文件更…

前端面試題日常練-day26 【面試題】

題目 希望這些選擇題能夠幫助您進行前端面試的準備&#xff0c;答案在文末。 1. Vue中&#xff0c;以下哪個選項可以用于在組件之間傳遞數據&#xff1f; a) props b) emit c) model d) data 2. 在Vue中&#xff0c;以下哪個指令可以用于條件性地渲染一個元素&#xff1f; …

【Python設計模式10】外觀模式

外觀模式&#xff08;Facade Pattern&#xff09;是一種結構型設計模式&#xff0c;它通過提供一個統一的接口&#xff0c;來簡化客戶端與復雜系統之間的交互。外觀模式為子系統中的一組接口提供一個高層接口&#xff0c;使得子系統更容易使用。 外觀模式的結構 外觀模式主要…

【學習心得】超簡單的加載模型和保存模型的方法

方法一&#xff1a;pickle庫 這是Python的標準序列化模塊&#xff0c;可以將幾乎任何Python對象轉化為字節流&#xff08;即序列化&#xff09;&#xff0c;然后可以將其存儲到文件中或通過網絡發送。之后&#xff0c;可以使用pickle再次加載這個字節流&#xff0c;恢復原始對象…

Linux shell命令

cat 文件名 查看文件內容&#xff0c; tac文件名 倒著顯示。 more 文件名 顯示內容 less文件名 和more的功能一樣&#xff0c;按上下左右鍵&#xff0c;按Q鍵結束。 head文件名&#xff0c;只顯示前10行內容。 ln是一個默認創建硬鏈接的命令 ln 文件名 ls -i文件名…

全棧:Web 用戶登錄過程實例與Cookie管理

用戶創建與使用cookie全過程 1.用戶訪問網站 當用戶使用瀏覽器訪問一個網站時&#xff0c;瀏覽器會向服務器發送一個HTTP請求。 2. 服務器響應請求 服務器接收到HTTP請求后&#xff0c;會處理請求并準備響應。如果服務器需要設置Cookie&#xff0c;它會在HTTP響應頭中包含一…

SpringBoot整合RabbitMQ的快速使用教程

目錄 一、引入依賴 二、配置rabbitmq的連接信息等 1、生產者配置 2、消費者配置 三、設置消息轉換器 四、生產者代碼示例 1、配置交換機和隊列信息 2、生產消息代碼 五、消費者代碼示例 1、消費層代碼 2、業務層代碼 在分布式系統中&#xff0c;消息隊列是一種重要…

#職場發展#其他

一閃論文是目前市場上一款非常靠譜的論文寫作工具&#xff0c;不僅可以幫助用戶快速完成論文撰寫&#xff0c;還能對文章進行查重降重&#xff0c;確保內容原創性。從用戶的角度來看&#xff0c;一閃論文確實是一個非常方便、實用的工具&#xff0c;能夠大大提高寫作效率&#…

00Java準備工作

目錄 JDK的安裝目錄 JAVA環境變量的配置 JAVA小知識 JDK的安裝目錄 目錄名稱說明bin該路徑下存放了JDK的各種工具命令,javac和java就放在這個目錄conf該路徑下存放了JDK的相關配置文件include該路徑下存放了一些平臺特定的頭文件jmods該路徑下存放了JDK的各種模塊legal該路…

簡單隨機數據算法

文章目錄 一&#xff0c;需求概述二&#xff0c;實現代碼三、測試代碼四、測試結果五、源碼傳送六、效果演示 一&#xff0c;需求概述 系統啟動時&#xff0c;讀取一組圖片數據&#xff0c;通過接口返回給前臺&#xff0c;要求&#xff1a; 圖片隨機相鄰圖片不重復 二&#…

Java數據結構與算法(散列表)

前言 散列表是根據關鍵碼值(Key value)而直接進行訪問的數據結構。也就是說&#xff0c;它通過把關鍵碼值映射到表中一個位置來訪問記錄&#xff0c;以加快查找的速度。而key的沖突主要通過鏈表的方式來處理&#xff0c;后期鏈表過長情況下可以通過紅黑樹來優化查詢效率。 實…

進程互斥經典問題(讀寫者問題、理發店問題)

目錄 讀寫者問題 問題描述 問題分析 進程互斥問題三部曲 讀者寫者算法實現 一、找進程——確定進程關系 二、找主營業務 三、找同步約束 a.互斥 b.資源 c.配額 理發店問題 問題描述 問題分析 進程互斥問題三部曲 理發店問題算法實現 一、找進程——確定進程…

SB-OSC,最新的 MySQL Schema 在線變更方案

目前主流的 MySQL 在線變更方案有兩個&#xff1a; 基于 trigger 的 pt-online-schema-change基于 binlog 的 gh-ost 上周 Sendbird 剛開源了他們的 MySQL Schema 在線變更方案 SB-OSC: Sendbird Online Schema Change。 GitHub 上剛剛 25 顆星星&#xff0c;絕對新鮮出爐。 …

Qt Creator(2)【如何在Qt Creator中創建新工程】

閱讀導航 引言一、Qt Creator開始界面介紹二、如何在Qt Creator中創建新工程1. 新建項目2. 選擇項目模板3. 選擇項目路徑4. 選擇構建系統5. 填寫類信息設置界面6. 選擇語言和翻譯文件7. 選擇Qt套件8. 選擇版本控制系統9. 最終效果 三、認識Qt Creator項目內容界面1. 基本界面2.…