国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【深度學習筆記】徹底理解torch中的tensor與numpy中array區(qū)別及用法

這篇具有很好參考價值的文章主要介紹了【深度學習筆記】徹底理解torch中的tensor與numpy中array區(qū)別及用法。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。


前言

剛接觸深度學習的同學,很多開源項目代碼中,張量tensor數(shù)組array都有使用,不清楚兩者有什么區(qū)別,以及怎么使用,如何相互轉(zhuǎn)換等。博主起初也有類似的疑惑,經(jīng)過查閱資料以及實踐,逐漸有了深入了解,本文將記錄并分享自己對兩者的理解,可供參考。

提示:以下是本篇文章正文內(nèi)容,下面案例可供參考

一、先搞懂Torch中的tensor與Tensor

torch.Tensor()也就是torch.FloatTensor()的另一種簡寫,torch.Tensor()會生成**單精度浮點類型(32位)**的張量,如下所示:

#使用torch.FloatTensor()定義一個張量,查看類型
>>> import torch
>>> I = torch.Tensor([2, 3])
tensor([2., 3.])
>>> I.type()
'torch.FloatTensor'
>>>

與torch.Tensor()同級類似的還有torch.IntTensor(),torch.LongTensor(),torch.DoubleTensor(),分別為短整型、長整型、雙精度浮點型(64位)。
torch.tensor()中的數(shù)據(jù)類型決定生成張量的類型,如下所示:

>>> I = torch.tensor([2, 3])
>>> I.type()
'torch.LongTensor'
>>>
>>> I = torch.tensor([1., 2.])
>>> I.type()
'torch.FloatTensor' 
>>>  

可以通過torch.set_default_tensor_type(t)設置默認的tensor類型,如要使用torch.tensor()建立一個雙精度浮點類型的張量,如下所示:

>>> torch.set_default_tensor_type(torch.DoubleTensor)  #指定默認類型
>>> torch.tensor([1.2, 3]).dtype  
torch.float64

二、torch.tensor()的用處及數(shù)據(jù)特點

在深度學習pytorch框架中,torch.tensor是存儲和變換數(shù)據(jù)的重要工具。在torch中,為tensor計算提供了GPU加速、梯度自動求導等功能,這使得深度學習這種擁有龐大計算量的工程提高了計算效率,可以說torch.tensor專為深度學習設計的。

三、np.array()與torch.tensor()比較

numpy產(chǎn)生的數(shù)組類型為numpy.ndarray,
1、與torch.tensor()不同,另外打印數(shù)組類型的方式也有區(qū)別,umpy中沒有x.type()的用法,只能使用type(x);
2、numpy.ndarray類型的數(shù)據(jù)只能放在cpu中計算,而tensor可以放在GPU計算,也可以CPU計算。如下所示:

>>> import numpy as np
>>> A = np.array([[1, 2], [2, 4]])
>>> A
array([[1, 2],
       [2, 4]])
>>> type(A)
<class 'numpy.ndarray'>
>>>

Pytorch中的Tensor又包括CPU上的數(shù)據(jù)類型和GPU上的數(shù)據(jù)類型,兩種數(shù)據(jù)類型之間也可以進行相互轉(zhuǎn)換。

三、np.array()與torch.tensor()相互轉(zhuǎn)換

訓練時,我們需要先把圖像數(shù)據(jù)讀取轉(zhuǎn)換為np.array()類型的數(shù)組,然后把np.array()轉(zhuǎn)換為torch.tensor,用于深度學習訓練加速。我們使用**numpy()和from_numpy()**將Tensor和NumPy中的數(shù)組相互轉(zhuǎn)換。
注意這兩個函數(shù)所產(chǎn)生的的Tensor和NumPy中的數(shù)組共享相同的內(nèi)存(所以他們之間的轉(zhuǎn)換很快),改變其中一個時另一個也會改變,

還有一個常用的將NumPy中的array轉(zhuǎn)換成Tensor的方法就是torch.tensor(), 
需要注意的是,此方法總是會進行數(shù)據(jù)拷貝(就會消耗更多的時間和空間),
所以返回的Tensor和原來的數(shù)據(jù)不再共享內(nèi)存。

1.使用numpy()將Tensor轉(zhuǎn)換成NumPy數(shù)組:

代碼如下(示例):

>>> a = torch.ones(5)
>>> a
tensor([1., 1., 1., 1., 1.])
>>> a.type()
'torch.FloatTensor'
>>> b = a.numpy()
>>> b
array([1., 1., 1., 1., 1.], dtype=float32)
>>>

2.使用from_numpy()將NumPy數(shù)組轉(zhuǎn)換成Tensor:

代碼如下(示例):

>>> a = np.ones(5)
>>> a
array([1., 1., 1., 1., 1.])
>>> type(a)
<class 'numpy.ndarray'>
>>>
>>> b = torch.from_numpy(a)
>>> b
tensor([1., 1., 1., 1., 1.], dtype=torch.float64)
>>>

3.直接使用torch.tensor()將NumPy數(shù)組轉(zhuǎn)換成Tensor:

**注意:該方法總是會進行數(shù)據(jù)拷貝,返回的Tensor和原來的numpy數(shù)據(jù)不再共享內(nèi)存。**驗證代碼如下:

>>> a = np.ones(5)
>>> a
array([1., 1., 1., 1., 1.])
>>> type(a)
<class 'numpy.ndarray'>
>>>
>>> b = torch.from_numpy(a)
>>> b
tensor([1., 1., 1., 1., 1.], dtype=torch.float64)
>>>
>>> c = torch.tensor(a)
>>> c
tensor([1., 1., 1., 1., 1.], dtype=torch.float64)	
>>> a += 1
>>> a
array([2., 2., 2., 2., 2.])				#a的值加1,改變
>>> c
tensor([1., 1., 1., 1., 1.], dtype=torch.float64)  #c的值未變,因為是拷貝,不共享內(nèi)存
>>> b
tensor([2., 2., 2., 2., 2.], dtype=torch.float64)	#b的值已經(jīng)改變,與a的值一樣,雖然類型不一樣
>>>

總結(jié)

本文主要記錄介紹torch.tensor與numpy.array之間的區(qū)別,以及應用場景,相互轉(zhuǎn)換的方法,講述了更多的細節(jié),這些知識點在深度學習模型訓練中非常有用,屬于基礎(chǔ)知識。博主后續(xù)會繼續(xù)更新分享深度學習筆記,記錄提煉知識點,總結(jié)學習經(jīng)驗及項目經(jīng)驗。如果本文對您的理解有幫助,請點贊+關(guān)注+收藏!文章來源地址http://www.zghlxwxcb.cn/news/detail-402615.html

到了這里,關(guān)于【深度學習筆記】徹底理解torch中的tensor與numpy中array區(qū)別及用法的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務器費用

相關(guān)文章

  • 機器學習和深度學習--李宏毅(筆記與個人理解)Day9

    機器學習和深度學習--李宏毅(筆記與個人理解)Day9

    中間打了一天的gta5,圖書館閉館正好+npy 不舒服那天+天氣不好,哈哈哈哈哈總之各種理由吧,導致昨天沒弄起來,今天補更! 這里重點注意一下, 這個 output值是概率哈,也就是說式子整體表示的含義是 x 屬于c1的概率是多大 這個老師真的是講到我的心坎子里區(qū)了,這個lo

    2024年04月17日
    瀏覽(31)
  • tensor是pytorch的核心,那torch.tensor和torch.Tensor區(qū)別是?

    從本節(jié)課程開始我們將正式開啟pytorch的學習了,在深度學習框架中有一個重要的概念叫做張量,它是pytorch的基本操作單位,要想創(chuàng)建tensor有很多的方式,但是有兩個torch.tensor和torch.Tensor容易混淆,本節(jié)課程對二者進行總結(jié)。 torch.Tensor是默認的tensor類型(torch.FloatTensor)的簡

    2024年04月24日
    瀏覽(35)
  • 一文理解深度學習中的多尺度和不同感受野(視野)信息

    一文理解深度學習中的多尺度和不同感受野(視野)信息

    如何理解深度學習中的多尺度和不同視野信息 在進行圖像處理的深度模型中,合理理解并利用不同尺度信息和不同視野信息將對圖像結(jié)果有意想不到的結(jié)果,那么具體什么是多尺度信息,什么是不同視野信息 1.不同尺度信息 多尺度是指不同尺度的信號采樣,在不同尺度下可

    2024年02月16日
    瀏覽(23)
  • 『CV學習筆記』深度理解半精度float16的表示

    『CV學習筆記』深度理解半精度float16的表示 深度學習中 int8、float16、float32 的主要卻別在于能表示的 數(shù)值范圍、數(shù)值精度 。 半精度是英偉達在2002年搞出來的,雙精度和單精度是為了計算, 而半精度更多是為了降低數(shù)據(jù)傳輸和存儲成本 。很多場景對于精度要求也沒那么高,

    2024年02月03日
    瀏覽(18)
  • 徹底理解solidity中的事件

    在我之前的幾篇關(guān)于智能合約的文章中,都有提到事件的用法,比如: 這里定義了兩個事件,分別表示最高競價更新了和拍賣結(jié)束了。 然后在需要的位置,調(diào)用事件,比如: 我們可以通過emit調(diào)用事件方法,然后這個事件就作為日志記錄到了以太坊區(qū)塊鏈中。日志是以太坊區(qū)

    2024年02月02日
    瀏覽(18)
  • 【深度學習】pytorch——Tensor(張量)詳解

    【深度學習】pytorch——Tensor(張量)詳解

    筆記為自我總結(jié)整理的學習筆記,若有錯誤歡迎指出喲~ Tensor,又名張量。它可以是一個數(shù)(標量)、一維數(shù)組(向量)、二維數(shù)組(矩陣)和更高維的數(shù)組(高階數(shù)據(jù))。Tensor和Numpy的ndarrays類似,但PyTorch的tensor支持GPU加速。 官方文檔 : https://pytorch.org/docs/stable/tensors.html

    2024年02月06日
    瀏覽(61)
  • 【自然語言處理】【深度學習】NLP中的N-gram理解

    N-gram是自然語言處理(NLP)中的一個概念,它描述的是文本中連續(xù)的n個項(通常是單詞或字符)。這個概念主要用于語言建模和文本分析中。 具體來說: Unigram (1-gram): 包含一個單詞的序列,例如句子中的單個單詞。 Bigram (2-gram): 包含兩個相鄰單詞的序列。例如,在句子 “

    2024年01月25日
    瀏覽(29)
  • 徹底理解FreeRTOS中的隊列(Queue)

    徹底理解FreeRTOS中的隊列(Queue)

    “隊列”(Queue)提供了任務與任務之間通信的機制。在這樣的場景:一個或多個其他的任務產(chǎn)生數(shù)據(jù),主任務要依次處理數(shù)據(jù),隊列就顯得非常有用了。 參考資料:《Mastering the FreeRTOS Real Time Kernel》-Chapter 4?Queue Management FreeRTOS全解析-5.隊列(Queue) 目錄 1.隊列的特征 1.1數(shù)據(jù)存

    2024年02月03日
    瀏覽(21)
  • 深度學習--PyTorch定義Tensor以及索引和切片

    ?這些方法只是開辟了空間,所附的初始值(非常大,非常小,0),后面還需要我們進行數(shù)據(jù)的存入。 torch.empty():返回一個沒有初始化的Tensor,默認是FloatTensor類型。 torch.FloatTensor():返回沒有初始化的FloatTensor。 torch.IntTensor():返回沒有初始化的IntTensor。 隨機均勻分布:

    2023年04月20日
    瀏覽(29)
  • (Python)對numpy中的argmax用法的理解

    (Python)對numpy中的argmax用法的理解

    argmax()返回的就是最大數(shù)的索引 argmax()有一個參數(shù)axis,可以指定函數(shù)返回不同維的最大值。 結(jié)果是 4 。而在python中一維向量只有一個方向,所以一維情況下axis只能等于0,函數(shù)只會返回一個值。 如果對它進行轉(zhuǎn)置,它就會變成一個二維矩陣: axis的值大于0 比如說 會報錯 nu

    2023年04月24日
    瀏覽(17)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包