深度學習之PyTorch基本使用(一)

一、PyTorch簡介與安裝

1.核心概念

????????PyTorch 是一款 Python 深度學習框架,其核心是張量(Tensor)?—— 元素為同一種數據類型的多維矩陣,以 “類” 的形式封裝,內置了張量運算、處理等方法,是深度學習中數據存儲和計算的基礎單元。

2.安裝命令

????????pip install torch===1.10.0 -i https://pypi.tuna.tsinghua.edu.cn/simple

二、張量的創建與類型轉換

1.基本創建方式

創建函數功能描述示例代碼輸出結果
torch.tensor()根據指定數據(標量、列表、NumPy 數組等)創建張量,自動匹配數據類型torch.tensor(10)
torch.tensor([[10.,20.,30.],[40.,50.,60.]])
tensor(10)
tensor([[10.,20.,30.],[40.,50.,60.]])
torch.Tensor()1. 傳入形狀參數時,創建指定形狀的未初始化張量(默認float32
2. 傳入列表時,創建包含指定元素的張量
torch.Tensor(2,3)
torch.Tensor([10,20])
tensor([[0.0000e+00, 3.6893e+19, 2.2018e+05],[4.6577e-10, 2.4158e-12, 1.1625e+33]])
tensor([10.,20.])
torch.IntTensor()/FloatTensor()/DoubleTensor()創建指定數據類型的張量,支持形狀參數或元素列表(元素會自動類型轉換)torch.IntTensor(2,3)
torch.IntTensor([2.5,3.3])
tensor([[0, 1610612736, 1213662609],[805308409, 156041223, 1]], dtype=torch.int32)
tensor([2,3], dtype=torch.int32)

2.線性與隨機張量創建

? ? ? ? 線性張量

? ? ? ? ? ? ? ? torch.arange(start,end,step):在(start,end)區間內按步長step生成 1 維張量,元素類型為int64。示例:torch.arange(0,10,2)?→?tensor([0,2,4,6,8])

? ? ? ? ? ? ? ? torch.linspace(start,end,step):在[start, end]區間內生成steps個等間隔元素的 1 維張量,默認float32。示例:troch.linspace(0,11,10)-->tensor([0.00,1.22,...,11.00])。

????????隨機張量與種子設置

? ? ? ? torch.randn(shape):生成符合標準正態分布(均值 0、方差 1)的指定形狀張量,默認float32。示例:torch.randn(2,3)?→ 2 行 3 列的隨機張量。

? ? ? ? 隨機種子:torch.random.manual_seed(seed)固定隨機種子,確保每次運行生成相同的隨機張量;torch.random.initial_seed()查看當前隨機種子。示例:

torch.random.manual_seed(100)
print(torch.randn(2,3))  # 每次運行結果一致
print(torch.random.initial_seed())  # 輸出100

3.0-1及指定值張量創建

? ? ? ? 全1張量:torch.ones(shape)創建指定形狀全 1 張量;torch.ones_like(tensor)根據已有張量形狀創建全 1 張量,示例:

data = torch.ones(2,3)  # tensor([[1.,1.,1.],[1.,1.,1.]])
data_like = torch.ones_like(data)  # 與data形狀相同的全1張量

? ? ? ? 全0張量:torch.zeros(shape)創建指定形狀全 0 張量;torch.zeros_like(tensor)根據已有張量形狀創建全 0 張量,用法與全 1 張量一致。

? ? ? ? 指定量張量:torch.full(shape, value)創建指定形狀、元素均為value的張量;torch.full_like(tensor, value)根據已有張量形狀創建指定值張量,示例:

data = torch.full([2,3],10)  # tensor([[10,10,10],[10,10,10]])
data_like = torch.full_like(data,20)  # 元素均為20的張量

4.張量類型轉換

? ? ? ? data.type(torch.目標類型)顯式指定目標類型,支持torch.ShortTensor(int16)、torch.IntTensor(int32)、torch.LongTensor(int64)、torch.FloatTensor(float32)、torch.DoubleTensor(float64)。

data = torch.full([2,3],10)  # dtype=torch.int64
data = data.type(torch.DoubleTensor)  # dtype=torch.float64

? ? ? ? data.目標類型縮寫():快捷轉換方法,如data.short()(轉 int16)、data.int()(轉 int32)、data.long()(轉 int64)、data.float()(轉 float32)、data.double()(轉 float64)。

data = torch.full([2,3],10)  # dtype=torch.int64
data = data.double()  # dtype=torch.float64

三、張量與其他數據類型的轉換

1.張量轉numpy數組

? ? ? ? 方法:data_tensor.numpy(),默認共享內存(修改一個,另一個同步變化);若需避免共享,使用data_tensor.numpy().copy()。

# 共享內存
data_tensor = torch.tensor([2,3,4])
data_numpy = data_tensor.numpy()
data_numpy[0] = 100  # data_tensor也變為tensor([100,3,4])# 不共享內存
data_numpy = data_tensor.numpy().copy()
data_numpy[0] = 200  # data_tensor仍為tensor([100,3,4])

2.numpy數組轉張量

轉換方法內存共享情況示例代碼輸出結果
torch.from_numpy(data_numpy)默認共享內存data_numpy = np.array([2,3,4])
data_tensor = torch.from_numpy(data_numpy)
tensor([2,3,4], dtype=torch.int32)(與 NumPy 數組類型匹配)
torch.tensor(data_numpy)默認不共享內存data_tensor = torch.tensor(data_numpy)

tensor([2,3,4], dtype=torch.int32)(修改張量不影響原數組)

3.標量張量與數字轉換

? ? ? ? 對于僅含一個元素的張量(標量張量),使用data.item()提取 Python 原生數字類型(如intfloat)。示例:

data1 = torch.tensor([30,])  # 標量張量
data2 = torch.tensor(30)     # 標量張量
print(data1.item())  # 30(int類型)
print(data2.item())  # 30(int類型)

四、張量數值計算與運算函數

1.基本運算

支持加減乘除、取負等操作,分為不修改原張量修改原張量(函數名帶下劃線)兩類,示例:

data = torch.randint(0,10,[2,3])  # 示例:tensor([[3,7,4],[0,0,6]])# 不修改原張量
new_data = data.add(10)  # 等價于data + 10 → tensor([[13,17,14],[10,10,16]])
new_data = data.sub(5)   # 等價于data - 5
new_data = data.mul(2)   # 等價于data * 2
new_data = data.div(2)   # 等價于data / 2
new_data = data.neg()    # 等價于-data# 修改原張量
data.add_(10)  # data變為tensor([[13,17,14],[10,10,16]])
data.sub_(5)   # data進一步修改

2.點乘與矩陣乘法

????????點乘(Hadamard積):兩個同形狀張量對應元素相乘,使用torch.mul(data1, data2)data1 * data2。示例:

data1 = torch.tensor([[1,2],[3,4]])
data2 = torch.tensor([[5,6],[7,8]])
print(torch.mul(data1, data2))  # tensor([[5,12],[21,32]])
print(data1 * data2)            # 同上

? ? ? ? 矩陣乘法:要求第一個張量的列數等于第二個張量的行數(形狀為(n,m)(m,p),結果為(n,p)),使用data1 @ data2torch.matmul(data1, data2)。示例:

data1 = torch.tensor([[1,2],[3,4],[5,6]])  # (3,2)
data2 = torch.tensor([[5,6],[7,8]])        # (2,2)
print(data1 @ data2)  # tensor([[19,22],[43,50],[67,78]])(3,2)
print(torch.matmul(data1, data2))  # 同上

3.常見運算函數

函數功能描述示例代碼輸出結果(基于data = torch.tensor([[4.,0.,7.],[6.,3.,5.]], dtype=torch.float64)
data.mean(dim=None)計算均值,dim=0按列算,dim=1按行算data.mean()
data.mean(dim=0)
tensor(4.1667, dtype=torch.float64)
tensor([5.0000,1.5000,6.0000], dtype=torch.float64)
data.sum(dim=None)計算總和,dim參數用法同meandata.sum()
data.sum(dim=1)
tensor(25., dtype=torch.float64)
tensor([11.,14.], dtype=torch.float64)
torch.pow(data, n)計算元素的 n 次冪torch.pow(data,2)tensor([[16.,0.,49.],[36.,9.,25.]], dtype=torch.float64)
data.sqrt()計算元素的平方根data.sqrt()tensor([[2.0000,0.0000,2.6458],[2.4495,1.7321,2.2361]], dtype=torch.float64)
data.exp()計算元素的自然指數(e^x)data.exp()tensor([[5.4598e+01,1.0000e+00,1.0966e+03],[4.0343e+02,2.0086e+01,1.4841e+02]], dtype=torch.float64)
data.log()/log2()/log10()分別計算自然對數、2 為底對數、10 為底對數data.log()
data.log10()
tensor([[1.3863, -inf,1.9459],[1.7918,1.0986,1.6094]], dtype=torch.float64)
tensor([[0.6021, -inf,0.8451],[0.7782,0.4771,0.6990]], dtype=torch.float64)

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

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

相關文章

SQLAlchemy -> Base.metadata.create_all(engine )詳解

目錄 一、核心作用 二、是否每次運行項目都會執行? 1. ??典型場景??(推薦) 2. ??需要避免的情況?? 三、最佳實踐建議 1. ??生產環境?? 2. ??開發/測試環境?? 四、常見問題解答 Q1: 如果表結構改了,creat…

C++異步任務處理與消息可靠性保障指南:從基礎到實戰

在當今多核處理器普及的時代,程序性能和響應能力的提升成為開發者面臨的核心課題。無論是高頻交易系統的毫秒級響應需求、實時游戲引擎的流暢交互體驗,還是網絡服務器的高并發處理能力,異步編程都已成為突破性能瓶頸的關鍵技術[1]。作為高性能…

LazyForEach性能優化:解決長列表卡頓問題

本文將深入解析HarmonyOS中LazyForEach的工作原理、性能優勢、實戰優化技巧及常見問題解決方案,幫助你構建流暢的長列表體驗。 1. LazyForEach 核心優勢與原理 LazyForEach 是鴻蒙ArkUI框架中為高性能列表渲染設計的核心組件,其核心設計思想基于動態加載…

Spring Boot 全棧優化:服務器、數據、緩存、日志的場景應用!

Spring Boot以其“開箱即用”聞名,但默認配置往往在高并發場景下成為瓶頸:Tomcat線程堵塞、數據庫連接耗盡、緩存命中率低下、日志洪水般淹沒磁盤。想象一個電商微服務,峰值流量下響應遲鈍,用戶流失——這不是宿命,而是…

Leetcode sql 50 ~5

select product_idfrom Productswhere low_fats Y and recyclable Y;SQL 規定:null 的比較必須用 is null 或 is not null,不能用普通的等號()。# Write your MySQL query statement below select name from Customer where ref…

C#高并發與并行理解處理

目錄 1.什么是IO密集型任務/CPU密集型任務 2.高并發概念和技術實現 2.并行(Parallelist)概念和技術實現 4.核心區別對比 1.什么是IO密集型任務/CPU密集型任務 1.IO密集型任務: 定義:任務核心邏輯不依賴CPU計算,而是…

正點原子STM32F407 U盤升級程序(IAP)OTA Bootloader APP USB升級+FATFS+USB Host

正點原子STM32F407 U盤升級程序(IAP)OTA Bootloader APP USB升級FATFSUSB HostChapter0 解決STM32 Bootloader跳轉APP失敗問題問題背景問題描述問題解決原APP跳轉的函數為:修改APP程序main入口處Chapter1 MDK如何生成*.bin格式的文件Chapter2…

MySQL 8.0 在 Ubuntu 22.04 中如何將啟用方式改為mysql_native_password(密碼認證)

MySQL 8.0 在 Ubuntu 22.04 中默認啟用了 auth_socket 認證方式(而非密碼認證),導致 mysql_secure_installation 跳過了 root 密碼設置。這會直接影響后續用 Navicat 連接 MySQL(因為 Navicat 需要密碼登錄),必須手動調整 root 用戶的認證方式并設置密碼。 核心問題:au…

七層網絡協議-面試

七層網絡協議概述七層網絡協議,即OSI(Open Systems Interconnection)模型,是由國際標準化組織(ISO)提出的網絡通信框架。它將網絡通信過程劃分為七個層次,每一層負責特定的功能,并通…

【Blender】二次元人物制作【二】:五官的制作

一、制作眼睛 選中眼眶內部的一圈線。shiftD復制出來調整成圓形,然后F快捷鍵填充將眼睛放在眼框內合適的位置,并用i鍵進行幾次內插,做出瞳孔,并且將內部的眼瞳做得稍微向內凹陷一點。二、制作睫毛 選中眼眶上半部分的面&#xff0…

Deepin 25 系統安裝 Docker:完整教程 + 常見問題解決

Deepin 25 系統安裝 Docker:完整教程 常見問題解決 作為基于 Debian 的 Linux 發行版,Deepin 25 因系統目錄(如/usr)默認只讀的特性,安裝 Docker 時需特殊處理 GPG 公鑰存儲路徑。本文結合社區實踐,整理出…

Redis MySQL小結

問題1:Redis為什么高效?答:基于內存,reactor,value的數據組織(五種數據結構),KV的數據組織方式(漸進hash)問題2:跳表是什么?和紅黑樹的…

Flink on YARN 實戰問題排查指南(精華版)

一、客戶端常見問題速查 ?1. JAR加載失敗終極解法?報錯提示:"Could not build the program from JAR file" 核心原因:80%的情況是Hadoop依賴缺失 黃金配置:export HADOOP_CONF_DIR${HADOOP_HOME}/etc/hadoop export HADOOP_CLASS…

迅為RK3576開發板Android12制作使用系統簽名

配套資料在網盤資料“iT0P-RK3576 開發板\02_【iTOP-RK3576 開發板】開發資料\ 08Android 系統開發配套資料\ 07 Android 制作使用系統簽名”目錄下制作簽名文件 在 Android 源碼 build/make/target/product/security/下存放著簽名文件,如下所示:將北京迅…

django連接minio實現文件上傳下載(提供接口示例)

django連接minio實現文件上傳下載(提供接口示例)項目環境前提1.模型創建2. 在 settings.py 中添加 MINIO 配置3.創建 MINIO 工具類4.創建序列化器5. 創建視圖6. 配置 URL 路由7.接口測試項目環境前提 已安裝python3.8以上環境已安裝djangorestframework…

Kafka消息隊列進階:發送策略與分區算法優化指南

Kafka消息隊列進階:發送策略與分區算法優化指南 目錄Kafka消息隊列進階:發送策略與分區算法優化指南摘要1. Kafka消息發送模式概述1.1 消息發送的核心流程1.2 三種發送模式對比2. 同步發送模式詳解2.1 同步發送實現原理2.2 同步發送性能優化3. 異步發送模…

【VScode】ssh報錯

【VScode】ssh報錯1. ssh報錯2. 解決1. ssh報錯 Failed to parse remote port from server output 2. 解決 windows電腦刪除 C:\Users\username\.ssh\known_hosts linux cd /home/username/.vscode-server/ rm -rf ~/.vscode-server重新回到Vscode連接ok

Grafana+Loki+Alloy構建企業級日志平臺

1.日志系統介紹日志系統:GLA、ELK、數倉 ?志處理流程:采集 > 存儲 > 檢索 > 可視化日志系統工作流程:日志平臺的目的:統一聚合分散的日志日志平臺搭建方案:ELK:ElasticSearch:存儲日志&#xff0…

老梁聊全棧系列:(階段一)現代全棧的「角色邊界」與「能力雷達圖」

JAVA Vue/React 雙棧工程師的「T 型→E 型」進化指南 接上篇《從單體到云原生的演進脈絡》 大家好,我是技術老梁,這是系列文章的第五篇。歡迎大家討論,分享經驗。如果知識對你有用,關注我,多多支持老梁,鼓…

使用 C# 設置 Excel 單元格格式

在實際報表開發中,Excel 的可讀性和美觀性與數據本身同樣重要。合理的單元格格式設置不僅能讓數據一目了然,還能讓報表顯得更專業。通過使用 C#,開發者可以精確控制 Excel 文件的單元格樣式,無需依賴 Microsoft Office。 本文演示…