深度學習 -- 初步認識Torch

深度學習 – 初步認識Torch

文章目錄

  • 深度學習 -- 初步認識Torch
  • 一,認識人工智能
    • 1.1 人工智能的本質
    • 1.2 人工智能的實現過程
  • 二,認識Torch
    • 2.1簡介
    • 2.2 概述
    • 2.3 Tensor的創建
      • 2.3.1 torch.tensor
      • 2.3.2 torch.Tensor
  • 三,創建線性和隨機張量
    • 3.1創建線性張量
    • 3.2 隨機張量
      • 3.2.1 隨機數種子
      • 3.2.2 隨機張量
  • 四,Tensor常見屬性
    • 4.1常見屬性
    • 4.2 切換設備
    • 4.3類型轉換


一,認識人工智能

1.1 人工智能的本質

  1. 本質是數學計算
  2. 數學是理論關鍵
  3. 計算機是實現關鍵:算力
  4. 新的有效算法,需要更大的算力

? NLP(說話,聽)、CV(眼睛)、自動駕駛、機器人(肢體動作)、大模型

1.2 人工智能的實現過程

三要素:數據、網絡、算力

① 神經網絡:找到合適的數學公式;

② 訓練:用已有數據訓練網絡,目標是求最優解;

③ 推理:用模型預測新樣本;

二,認識Torch

2.1簡介

PyTorch是一個基于Python的深度學習框架,它提供了一種靈活、高效、易于學習的方式來實現深度學習模型。PyTorch最初由Facebook開發,被廣泛應用于計算機視覺、自然語言處理、語音識別等領域。

? PyTorch使用張量(tensor)來表示數據,可以輕松地處理大規模數據集,且可以在GPU上加速。

? PyTorch提供了許多高級功能,如**自動微分(automatic differentiation)、自動求導(automatic gradients)**等,這些功能可以幫助我們更好地理解模型的訓練過程,并提高模型訓練效率。

2.2 概述

PyTorch會將數據封裝成張量(Tensor)進行計算,所謂張量就是元素為相同類型的多維矩陣。

張量可以在 GPU 上加速運行。

  • 張量是一個多維數組,通俗來說可以看作是擴展了標量、向量、矩陣的更高維度的數組。張量的維度決定了它的形狀(Shape),例如:

    • 標量 是 0 維張量,如 a = torch.tensor(5)

    • 向量 是 1 維張量,如 b = torch.tensor([1, 2, 3])

    • 矩陣 是 2 維張量,如 c = torch.tensor([[1, 2], [3, 4]])

    • 更高維度的張量,如3維、4維等,通常用于表示圖像、視頻數據等復雜結構。

    • 動態計算圖:PyTorch 支持動態計算圖,這意味著在每一次前向傳播時,計算圖是即時創建的。

    • GPU 支持:PyTorch 張量可以通過 .to('cuda') 移動到 GPU 上進行加速計算。

    • 自動微分:通過 autograd 模塊,PyTorch 可以自動計算張量運算的梯度,這對深度學習中的反向傳播算法非常重要。

    • PyTorch中有3種數據類型:浮點數、整數、布爾。其中,浮點數和整數又分為8位、16位、32位、64位,加起來共9種。原因是:場景不同,對數據的精度和速度要求不同。通常,移動或嵌入式設備追求速度,對精度要求相對低一些。精度越高,往往效果也越好,自然硬件開銷就比較高。

2.3 Tensor的創建

2.3.1 torch.tensor

根據指定的數據創建張量

import torch#使用tensor創建張量
def text1():t1=torch.tensor([1,2,3],dtype=torch.float32,device='cuda')print(t1)print(t1.shape)print(t1.size())#和shapS作用一樣print(t1.dtype)if __name__ == '__main__':text1()
tensor([1., 2., 3.], device='cuda:0')
torch.Size([3])
torch.Size([3])
torch.float32

2.3.2 torch.Tensor

根據形狀創建張量,其也可用來創建指定數據的張量

#使用Tensor構造函數,構建張量
#強制將數據類型裝換位float32
def text2():t1=torch.Tensor([1,2,3])print(t1)print(t1.size())print(t1.dtype)if __name__ == '__main__':# text1()text2()
python
tensor([1., 2., 3.])
torch.Size([3])
torch.float32

torch.Tensor與torch.tensor區別

特性torch.Tensor()torch.tensor()
數據類型推斷強制轉為 torch.float32根據輸入數據自動推斷(如整數→int64
顯式指定 dtype不支持支持(如 dtype=torch.float64
設備指定不支持支持(如 device='cuda'
輸入為張量時的行為創建新副本(不繼承原屬性)默認共享數據(除非 copy=True
推薦使用場景需要快速創建浮點張量需要精確控制數據類型或設備

三,創建線性和隨機張量

3.1創建線性張量

import torch
import numpy as np
# 設置打印精度
torch.set_printoptions(sci_mode=False)def test01():#創建線性張量r1=torch.arange(1,10,2)print(r1)#在指定空間按照元素個數生成張量r2=torch.linspace(1,10,10)#創建一個從一到十的線性張量print(r2)r3=torch.linspace(3,10000,10)#創建一個從3到10000的線性張量print(r3)if __name__ == '__main__':test01()
tensor([1, 3, 5, 7, 9])
tensor([ 1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,  9., 10.])
tensor([    3.0000,  1113.7778,  2224.5557,  3335.3335,  4446.1113,  5556.8887,6667.6665,  7778.4443,  8889.2227, 10000.0000])

3.2 隨機張量

使用torch.randn 創建隨機張量

3.2.1 隨機數種子

隨機數種子(Random Seed)是一個用于初始化隨機數生成器的數值。隨機數生成器是一種算法,用于生成一個看似隨機的數列,但如果使用相同的種子進行初始化,生成器將產生相同的數列。

import torchdef test01():torch.manual_seed(1)print(torch.initial_seed())
1

3.2.2 隨機張量

在 PyTorch 中,種子影響所有與隨機性相關的操作,包括張量的隨機初始化、數據的隨機打亂、模型的參數初始化等。通過設置隨機數種子,可以做到模型訓練和實驗結果在不同的運行中進行復現。

def test02():#首先設置隨機數種子torch.manual_seed(225)#生成一個5*5的矩陣,1到3的隨機數x = torch.randint(1, 6, (5, 5))print(x)#randn 生成正太分布的隨機數Ss1=torch.randn(2,3)print(s1)
tensor([[5, 1, 5, 3, 3],[2, 5, 4, 3, 2],[1, 4, 3, 2, 3],[1, 2, 5, 3, 4],[4, 1, 5, 5, 2]])
tensor([[ 0.5403,  1.1903,  0.5832],[ 1.5792,  1.5763, -0.6938]])

四,Tensor常見屬性

張量有device、dtype、shape等常見屬性

4.1常見屬性

import torchdef test01():x = torch.tensor([1, 2, 3])print(x.dtype)# torch.int64print(x.device)# cpuprint(x.requires_grad)# Falseprint(x.shape)# torch.Size([3]),表示一維向量,長度為3print(x.size())# torch.Size([3]),表示一維向量,長度為3print(x.ndimension())# 1,張量維度print(x.numel())# 3,元素總數print(x.dim())# 1,張量維度數if __name__ == '__main__':test01()
torch.int64
cpu
False
torch.Size([3])
torch.Size([3])
1
3
1

4.2 切換設備

import torchdef test01():#在創建當量時制定devicex = torch.randint(1, 3, (5, 5), device='cuda')print(x)#使用to方法將數據移動到GPU#轉換后要重新賦值y=torch.tensor([1,2,3])y = y.to('cuda')print(y.device)#使用cuda()或cpu()方法  z=torch.tensor([1,2,3],device='cuda')z=z.cpu()print(z.device)if __name__ == '__main__':test01()
tensor([[2, 2, 1, 2, 2],[1, 2, 1, 2, 1],[1, 1, 2, 1, 1],[1, 2, 1, 2, 2],[2, 2, 2, 1, 2]], device='cuda:0')
cuda:0
cpu

4.3類型轉換

import torchdef test01():#在創建當量時制定devicex = torch.randint(1, 3, (5, 5), device='cuda')print(x)#使用to方法將數據移動到GPU#轉換后要重新賦值y=torch.tensor([1,2,3])y = y.to('cuda')print(y.device)#使用cuda()或cpu()方法  z=torch.tensor([1,2,3],device='cuda')z=z.cpu()print(z.device)def test02():data = torch.tensor([1,2,3])#創建張量print(data.dtype)#使用type()方法轉換數據類型data = data.type(torch.float32)print(data.dtype)data = data.type(torch.int32)print(data.dtype)#使用類型方法data = data.float()#轉換為float32print(data.dtype)data = data.int()#轉換為int32print(data.dtype)data = data.long()#轉換為int64print(data.dtype)data = data.short()#轉換為int16print(data.dtype)#使用dtype屬性data = torch.tensor([1,2,3],dtype=torch.float32)#轉換為float32print(data.dtype)if __name__ == '__main__':# test01()test02()
torch.int64
torch.float32
torch.int32
torch.float32
torch.int32
torch.int64
torch.int16
torch.float32

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

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

相關文章

BGP的“聰明選路”遇上了TCP的“路徑潔癖”,需人工調和

在路由器R1上有兩條外網,WAN1和WAN2。R1上做了域名分流功能,全局網址分到WAN1,指定域名分到WAN2(優先級更高)。癥狀是用戶反饋部分網頁無法打開。于是各種檢查嘗試...... 2天過去了......最終結論是:即使S…

ACWing算法筆記 | 二分

🔍 C 二分查找雙模板詳解:左閉右開 vs 左閉右閉(二分筆記)二分查找(Binary Search)是一類高效的搜索算法,在 O(log n) 的時間復雜度下查找答案,適用于單調性問題。C STL 的 lower_bo…

centos 新加磁盤分區動態擴容

你不能直接將一個分區分配給/dev/mapper/centos-root,因為這是一個邏輯卷(屬于 LVM 系統)。不過,你可以通過以下步驟將/dev/sda3添加到現有卷組或創建新的邏輯卷: 確認磁盤和分區信息 首先檢查分區是否已格式化以及是否…

python學智能算法(二十六)|SVM-拉格朗日函數構造

【1】引言 前序學習進程中,已經了解了拉格朗日乘數法求極值的基本原理,也了解了尋找最佳超平面就是尋找最佳分隔距離。 這篇文章的學習目標是:使用拉格朗日乘數法獲取最佳的分隔距離。 【2】構造拉格朗日函數 目標函數 首先是目標函數f&a…

智能制造——48頁畢馬威:汽車營銷與研發數字化研究【附全文閱讀】

涵蓋了汽車行業數字化轉型、汽車營銷業務能力建設(以會員管理為例)以及汽車研發與創新能力建設等議題。畢馬威認為,軟件定義汽車已成為汽車行業中的核心議題,并圍繞此議題提供了相關方案。在市場觀點方面,畢馬威與多家…

嵌入式學習-PyTorch(8)-day24

torch.optim 優化器torch.optim 是 PyTorch 中用于優化神經網絡參數的模塊,里面實現了一系列常用的優化算法,比如 SGD、Adam、RMSprop 等,主要負責根據梯度更新模型的參數。🏗? 核心組成1. 常用優化器優化器作用典型參數torch.op…

PostgreSQL實戰:高效SQL技巧

PostgreSQL PG 在不同領域可能有不同的含義,以下是幾種常見的解釋: PostgreSQL PostgreSQL(簡稱 PG)是一種開源的關系型數據庫管理系統(RDBMS),支持 SQL 標準并提供了豐富的擴展功能。它廣泛應用于企業級應用、Web 服務和數據分析等領域。 PostgreSQL 的詳細介紹 Po…

3-大語言模型—理論基礎:生成式預訓練語言模型GPT(代碼“活起來”)

目錄 1、GPT的模型結構如圖所示 2、介紹GPT自監督預訓練、有監督下游任務微調及預訓練語言模型 2.1、GPT 自監督預訓練 2.1.1、 輸入編碼:詞向量與位置向量的融合 2.1.1.1、 輸入序列與詞表映射 2.1.1.2、 詞向量矩陣與查表操作 3. 位置向量矩陣 4. 詞向量與…

【Redis 】看門狗:分布式鎖的自動續期

在分布式系統的開發中,保證數據的一致性和避免并發沖突是至關重要的任務。Redis 作為一種廣泛使用的內存數據庫,提供了實現分布式鎖的有效手段。然而,傳統的 Redis 分布式鎖在設置了過期時間后,如果任務執行時間超過了鎖的有效期&…

MYSQL--快照讀和當前讀及并發 UPDATE 的鎖阻塞

快照讀和當前讀在 MySQL 中,數據讀取方式主要分為 快照讀 和 當前讀,二者的核心區別在于是否依賴 MVCC(多版本并發控制)的歷史版本、是否加鎖,以及讀取的數據版本是否為最新。以下是詳細說明:一、快照讀&am…

css樣式中的選擇器和盒子模型

目錄 一、行內樣式二、內部樣式三、外部樣式四、結合選擇器五、屬性選擇器六、包含選擇器七、子選擇器八、兄弟選擇器九、選擇器組合十、偽元素選擇器十一、偽類選擇器十二、盒子模型 相關文章 學習標簽、屬性、選擇器和外部加樣式積累CSS樣式屬性:padding、marg…

關于基于lvgl庫做的注冊登錄功能的代碼步驟:

以下是完整的文件拆分和代碼存放說明,按功能模塊化劃分,方便工程管理:一、需要創建的文件清單 文件名 作用 類型 main.c 程序入口,初始化硬件和LVGL 源文件 ui.h 聲明界面相關函數 頭文件 ui.c 實現登錄、注冊、主頁面的UI 源文…

RAII機制以及在ROS的NodeHandler中的實現

好的,這是一個非常核心且優秀的設計問題。我們來分兩步詳細解析:先徹底搞懂什么是 RAII,然后再看 ros::NodeHandle 是如何巧妙地運用這一機制的。1. 什么是 RAII 機制? RAII 是 “Resource Acquisition Is Initialization” 的縮寫…

Linux LVS集群技術

LVS集群概述1、集群概念1.1、介紹集群是指多臺服務器集中在一起,實現同一業務,可以視為一臺計算機。多臺服務器組成的一組計算機,作為一個整體存在,向用戶提供一組網絡資源,這些單個的服務器就是集群的節點。特點&…

spring-ai-alibaba如何上傳文件并解析

問題引出 在我們日常使用大模型時,有一類典型的應用場景,就是將文件發送給大模型,然后由大模型進行解析,提煉總結等,這一類功能在官方app中較為常見,但是在很多模型的api中都不支持,那如何使用…

「雙容器嵌套布局法」:打造清晰層級的網頁架構設計

一、命名與核心概念 “雙容器嵌套布局法”,核心是通過兩層容器嵌套構建網頁結構:外層容器負責控制布局的“宏觀約束”(如頁面最大寬度、背景色等),內層容器聚焦“微觀排版”(內容居中、內邊距調整、紅色內容…

基于深度學習的自然語言處理:構建情感分析模型

前言 自然語言處理(NLP)是人工智能領域中一個非常活躍的研究方向,它致力于使計算機能夠理解和生成人類語言。情感分析(Sentiment Analysis)是NLP中的一個重要應用,其目標是從文本中識別和提取情感傾向&…

JWT原理及利用手法

JWT 原理 JSON Web Token (JWT) 是一種開放的行業標準,用于在系統之間以 JSON 對象的形式安全地傳輸信息。這些信息經過數字簽名,因此可以被驗證和信任。其常用于身份驗證、會話管理和訪問控制機制中傳遞用戶信息。 與傳統的會話令牌相比,JWT…

DeepSeek 助力 Vue3 開發:打造絲滑的日歷(Calendar),日歷_睡眠記錄日歷示例(CalendarView01_30)

前言:哈嘍,大家好,今天給大家分享一篇文章!并提供具體代碼幫助大家深入理解,徹底掌握!創作不易,如果能幫助到大家或者給大家一些靈感和啟發,歡迎收藏關注哦 💕 目錄DeepS…

git的diff命令、Config和.gitignore文件

diff命令:比較git diff xxx:工作目錄 vs 暫存區(比較現在修改之后的工作區和暫存區的內容)git diff --cached xxx:暫存區 vs Git倉庫(現在暫存區內容和最一開始提交的文件內容的比較)git diff H…