溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

張量tensor是什么

發(fā)布時(shí)間:2021-12-08 09:55:41 來(lái)源:億速云 閱讀:236 作者:iii 欄目:大數(shù)據(jù)

這篇文章主要介紹“張量tensor是什么”,在日常操作中,相信很多人在張量tensor是什么問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”張量tensor是什么”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!

張量tensor是什么

也許你已經(jīng)下載了TensorFlow,而且準(zhǔn)備開(kāi)始著手研究深度學(xué)習(xí)。但是你會(huì)疑惑:TensorFlow里面的Tensor,也就是“張量”,到底是個(gè)什么鬼?也許你查閱了維基百科,而且現(xiàn)在變得更加困惑。也許你在NASA教程中看到它,仍然不知道它在說(shuō)些什么?問(wèn)題在于大多數(shù)講述張量的指南,都假設(shè)你已經(jīng)掌握他們描述數(shù)學(xué)的所有術(shù)語(yǔ)。

別擔(dān)心!

我像小孩子一樣討厭數(shù)學(xué),所以如果我能明白,你也可以!我們只需要用簡(jiǎn)單的措辭來(lái)解釋這一切。所以,張量(Tensor)是什么,而且為什么會(huì)流動(dòng)(Flow)?

0維張量/標(biāo)量  標(biāo)量是一個(gè)數(shù)字

1維張量/向量   1維張量稱為“向量”。

2維張量    2維張量稱為矩陣

3維張量  公用數(shù)據(jù)存儲(chǔ)在張量 時(shí)間序列數(shù)據(jù) 股價(jià) 文本數(shù)據(jù) 彩色圖片(RGB)

讓我們先來(lái)看看tensor(張量)是什么?

張量=容器

張量是現(xiàn)代機(jī)器學(xué)習(xí)的基礎(chǔ)。它的核心是一個(gè)數(shù)據(jù)容器,多數(shù)情況下,它包含數(shù)字,有時(shí)候它也包含字符串,但這種情況比較少。因此把它想象成一個(gè)數(shù)字的水桶。

張量有多種形式,首先讓我們來(lái)看最基本的形式,你會(huì)在深度學(xué)習(xí)中偶然遇到,它們?cè)?維到5維之間。我們可以把張量的各種類型看作這樣(對(duì)被題目中的貓咪吸引進(jìn)來(lái)小伙伴說(shuō)一句,不要急!貓咪在后面會(huì)出現(xiàn)哦!):

0維張量/標(biāo)量 ,裝在張量/容器水桶中的每個(gè)數(shù)字稱為“標(biāo)量”。標(biāo)量是一個(gè)數(shù)字。你會(huì)問(wèn)為什么不干脆叫它們一個(gè)數(shù)字呢?我不知道,也許數(shù)學(xué)家只是喜歡聽(tīng)起來(lái)酷?標(biāo)量聽(tīng)起來(lái)確實(shí)比數(shù)字酷。

實(shí)際上,你可以使用一個(gè)數(shù)字的張量,我們稱為0維張量,也就是一個(gè)只有0維的張量。它僅僅只是帶有一個(gè)數(shù)字的水桶。想象水桶里只有一滴水,那就是一個(gè)0維張量。

本教程中,我將使用Python,Keras,TensorFlow和Python庫(kù)Numpy。在Python中,張量通常存儲(chǔ)在Nunpy數(shù)組,Numpy是在大部分的AI框架中,一個(gè)使用頻率非常高的用于科學(xué)計(jì)算的數(shù)據(jù)包。

你將在Kaggle(數(shù)據(jù)科學(xué)競(jìng)賽網(wǎng)站)上經(jīng)常看到Jupyter Notebooks(安裝見(jiàn)文末閱讀鏈接,“數(shù)學(xué)爛也要學(xué)AI:帶你造一個(gè)經(jīng)濟(jì)試用版AI終極必殺器”)關(guān)于把數(shù)據(jù)轉(zhuǎn)變成Numpy數(shù)組。Jupyter notebooks本質(zhì)上是由工作代碼標(biāo)記嵌入??梢哉J(rèn)為它把解釋和程序融為一體。

我們?yōu)槭裁聪氚褦?shù)據(jù)轉(zhuǎn)換為Numpy數(shù)組?

很簡(jiǎn)單。因?yàn)槲覀冃枰阉械妮斎霐?shù)據(jù),如字符串文本,圖像,股票價(jià)格,或者視頻,轉(zhuǎn)變?yōu)橐粋€(gè)統(tǒng)一得標(biāo)準(zhǔn),以便能夠容易的處理。

這樣我們把數(shù)據(jù)轉(zhuǎn)變成數(shù)字的水桶,我們就能用TensorFlow處理。

它僅僅是組織數(shù)據(jù)成為可用的格式。在網(wǎng)頁(yè)程序中,你也許通過(guò)XML表示,所以你可以定義它們的特征并快速操作。同樣,在深度學(xué)習(xí)中,我們使用張量水桶作為基本的樂(lè)高積木。

1維張量/向量 如果你是名程序員,那么你已經(jīng)了解,類似于1維張量:數(shù)組。

每個(gè)編程語(yǔ)言都有數(shù)組,它只是單列或者單行的一組數(shù)據(jù)塊。在深度學(xué)習(xí)中稱為1維張量。張量是根據(jù)一共具有多少坐標(biāo)軸來(lái)定義。1維張量只有一個(gè)坐標(biāo)軸。 1維張量稱為“向量”。我們可以把向量視為一個(gè)單列或者單行的數(shù)字。

如果想在Numpy得出此結(jié)果,按照如下方法:我們可以通過(guò)NumPy’s ndim函數(shù),查看張量具有多個(gè)坐標(biāo)軸。我們可以嘗試1維張量。

2維張量  你可能已經(jīng)知道了另一種形式的張量,矩陣——2維張量稱為矩陣,這不是基努·里維斯(Keanu Reeves)的電影《黑客帝國(guó)》,想象一個(gè)excel表格。我們可以把它看作為一個(gè)帶有行和列的數(shù)字網(wǎng)格。這個(gè)行和列表示兩個(gè)坐標(biāo)軸,一個(gè)矩陣是二維張量,意思是有兩維,也就是有兩個(gè)坐標(biāo)軸的張量。

在Numpy中,我們可以如下表示:

x = np.array([[5,10,15,30,25],

[20,30,65,70,90],

[7,80,95,20,30]])

我們可以把人的特征存儲(chǔ)在一個(gè)二維張量。有一個(gè)典型的例子是郵件列表。

比如我們有10000人,我們有每個(gè)人的如下特性和特征:

First Name(名)

Last Name(姓)

Street Address(街道地址)

City(城市)

State(州/?。?

Country(國(guó)家)

Zip(郵政編碼)

這意味著我們有10000人的七個(gè)特征。

張量具有“形狀”,它的形狀是一個(gè)水桶,即裝著我們的數(shù)據(jù)也定義了張量的最大尺寸。我們可以把所有人的數(shù)據(jù)放進(jìn)二維張量中,它是(10000,7)。

你也許想說(shuō)它有10000列,7行。不。張量能夠被轉(zhuǎn)換和操作,從而使列變?yōu)樾谢蛘咝凶優(yōu)榱小?/strong>

3維張量

這時(shí)張量真正開(kāi)始變得有用,我們經(jīng)常需要把一系列的二維張量存儲(chǔ)在水桶中,這就形成了3維張量。

在NumPy中,我們可以表示如下:

x = np.array([[[5,10,15,30,25],

[20,30,65,70,90],

[7,80,95,20,30]]

[[3,0,5,0,45],

[12,-2,6,7,90],

[18,-9,95,120,30]]

[[17,13,25,30,15],

[23,36,9,7,80],

[1,-7,-5,22,3]]])

你已經(jīng)猜到,一個(gè)三維張量有三個(gè)坐標(biāo)軸,可以這樣看到:

x.ndim

輸出為:

3

讓我們?cè)倏匆幌律厦娴泥]件列表,現(xiàn)在我們有10個(gè)郵件列表,我們將存儲(chǔ)2維張量在另一個(gè)水桶里,創(chuàng)建一個(gè)3維張量,它的形狀如下:

(number_of_mailing_lists, number_of_people, number_of_characteristics_per_person)

(10,10000,7)

你也許已經(jīng)猜到它,但是一個(gè)3維張量是一個(gè)數(shù)字構(gòu)成的立方體。

我們可以繼續(xù)堆疊立方體,創(chuàng)建一個(gè)越來(lái)越大的張量,來(lái)編輯不同類型的數(shù)據(jù),也就是4維張量,5維張量等等,直到N維張量。N是數(shù)學(xué)家定義的未知數(shù),它是一直持續(xù)到無(wú)窮集合里的附加單位。它可以是5,10或者無(wú)窮。

實(shí)際上,3維張量最好視為一個(gè)立方體,有長(zhǎng)寬高這樣的。

存儲(chǔ)在張量數(shù)據(jù)中的公式

這里有一些存儲(chǔ)在各種類型張量的公用數(shù)據(jù)集類型:

3維=時(shí)間序列

4維=圖像

5維=視頻

幾乎所有的這些張量的共同之處是樣本量。樣本量是集合中元素的數(shù)量,它可以是一些圖像,一些視頻,一些文件或者一些推特。

通常,真實(shí)的數(shù)據(jù)至少是一個(gè)數(shù)據(jù)量。

把形狀里不同維數(shù)看作字段。我們找到一個(gè)字段的最小值來(lái)描述數(shù)據(jù)。

因此,即使4維張量通常存儲(chǔ)圖像,那是因?yàn)闃颖玖空紦?jù)張量的第4個(gè)字段。

例如,一個(gè)圖像可以用三個(gè)字段表示:

(width, height, color_depth) = 3D

但是,在機(jī)器學(xué)習(xí)工作中,我們經(jīng)常要處理不止一張圖片或一篇文檔——我們要處理一個(gè)集合。我們可能有10,000張郁金香的圖片,這意味著,我們將用到4D張量,就像這樣:

(sample_size, width, height, color_depth) = 4D

我們來(lái)看看一些多維張量存儲(chǔ)模型的例子:

時(shí)間序列數(shù)據(jù)

用3D張量來(lái)模擬時(shí)間序列會(huì)非常有效!

醫(yī)學(xué)掃描——我們可以將腦電波(EEG)信號(hào)編碼成3D張量,因?yàn)樗梢杂蛇@三個(gè)參數(shù)來(lái)描述:

(time, frequency, channel)

這種轉(zhuǎn)化看起來(lái)就像這樣:

如果我們有多個(gè)病人的腦電波掃描圖,那就形成了一個(gè)4D張量:

(sample_size, time, frequency, channel)

Stock Prices

在交易中,股票每分鐘有最高、最低和最終價(jià)格。如下圖的蠟燭圖所示:

紐交所開(kāi)市時(shí)間從早上9:30到下午4:00,即6.5個(gè)小時(shí),總共有6.5 x 60 = 390分鐘。如此,我們可以將每分鐘內(nèi)最高、最低和最終的股價(jià)存入一個(gè)2D張量(390,3)。如果我們追蹤一周(五天)的交易,我們將得到這么一個(gè)3D張量:

(week_of_data, minutes, high_low_price)

即:(5,390,3)

同理,如果我們觀測(cè)10只不同的股票,觀測(cè)一周,我們將得到一個(gè)4D張量

(10,5,390,3)

假設(shè)我們?cè)谟^測(cè)一個(gè)由25只股票組成的共同基金,其中的每只股票由我們的4D張量來(lái)表示。那么,這個(gè)共同基金可以有一個(gè)5D張量來(lái)表示:

(25,10,5,390,3)

文本數(shù)據(jù)

我們也可以用3D張量來(lái)存儲(chǔ)文本數(shù)據(jù),我們來(lái)看看推特的例子。

首先,推特有140個(gè)字的限制。其次,推特使用UTF-8編碼標(biāo)準(zhǔn),這種編碼標(biāo)準(zhǔn)能表示百萬(wàn)種字符,但實(shí)際上我們只對(duì)前128個(gè)字符感興趣,因?yàn)樗麄兣cASCII碼相同。所以,一篇推特文可以包裝成一個(gè)2D向量:

(140,128)

如果我們下載了一百萬(wàn)篇川普哥的推文(印象中他一周就能推這么多),我們就會(huì)用3D張量來(lái)存:

(number_of_tweets_captured, tweet, character)

這意味著,我們的川普推文集合看起來(lái)會(huì)是這樣:

(1000000,140,128)

圖片

4D張量很適合用來(lái)存諸如JPEG這樣的圖片文件。之前我們提到過(guò),一張圖片有三個(gè)參數(shù):高度、寬度和顏色深度。一張圖片是3D張量,一個(gè)圖片集則是4D,第四維是樣本大小。

著名的MNIST數(shù)據(jù)集是一個(gè)手寫的數(shù)字序列,作為一個(gè)圖像識(shí)別問(wèn)題,曾在幾十年間困擾許多數(shù)據(jù)科學(xué)家?,F(xiàn)在,計(jì)算機(jī)能以99%或更高的準(zhǔn)確率解決這個(gè)問(wèn)題。即便如此,這個(gè)數(shù)據(jù)集仍可以當(dāng)做一個(gè)優(yōu)秀的校驗(yàn)基準(zhǔn),用來(lái)測(cè)試新的機(jī)器學(xué)習(xí)算法應(yīng)用,或是用來(lái)自己做實(shí)驗(yàn)。

Keras 甚至能用以下語(yǔ)句幫助我們自動(dòng)導(dǎo)入MNIST數(shù)據(jù)集:

from keras.datasets import mnist

(train_images, train_labels), (test_images, test_labels) = mnist.load_data()

這個(gè)數(shù)據(jù)集被分成兩個(gè)部分:訓(xùn)練集和測(cè)試集。數(shù)據(jù)集中的每張圖片都有一個(gè)標(biāo)簽。這個(gè)標(biāo)簽寫有正確的讀數(shù),例如3,7或是9,這些標(biāo)簽都是通過(guò)人工判斷并填寫的。

訓(xùn)練集是用來(lái)訓(xùn)練神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)算法,測(cè)試集則用來(lái)校驗(yàn)這個(gè)學(xué)習(xí)算法。

MNIST圖片是黑白的,這意味著它們可以用2D張量來(lái)編碼,但我們習(xí)慣于將所有的圖片用3D張量來(lái)編碼,多出來(lái)的第三個(gè)維度代表了圖片的顏色深度

MNIST數(shù)據(jù)集有60,000張圖片,它們都是28 x 28像素,它們的顏色深度為1,即只有灰度。

TensorFlow這樣存儲(chǔ)圖片數(shù)據(jù):

(sample_size, height, width, color_depth).

于是我們可以認(rèn)為,MNIST數(shù)據(jù)集的4D張量是這樣的:

(60000,28,28,1)

彩色圖片

彩色圖片有不同的顏色深度,這取決于它們的色彩(注:跟分辨率沒(méi)有關(guān)系)編碼。一張典型的JPG圖片使用RGB編碼,于是它的顏色深度為3,分別代表紅、綠、藍(lán)。

這是一張我美麗無(wú)邊的貓咪(Dove)的照片,750 x750像素,這意味著我們能用一個(gè)3D張量來(lái)表示它:

(750,750,3)

My beautiful cat Dove (750 x 750 pixels)

這樣,我可愛(ài)的Dove將被簡(jiǎn)化為一串冷冰冰的數(shù)字,就好像它變形或流動(dòng)起來(lái)了。

然后,如果我們有一大堆不同類型的貓咪圖片(雖然都沒(méi)有Dove美),也許是100,000張吧,不是DOVE它的,750 x750像素的。我們可以在Keras中用4D張量來(lái)這樣定義:

(10000,750,750,3)

5D張量

5D張量可以用來(lái)存儲(chǔ)視頻數(shù)據(jù)。TensorFlow中,視頻數(shù)據(jù)將如此編碼:

(sample_size, frames, width, height, color_depth)

如果我們考察一段5分鐘(300秒),1080pHD(1920 x 1080像素),每秒15幀(總共4500幀),顏色深度為3的視頻,我們可以用4D張量來(lái)存儲(chǔ)它:

(4500,1920,1080,3)

當(dāng)我們有多段視頻的時(shí)候,張量中的第五個(gè)維度將被使用。如果我們有10段這樣的視頻,我們將得到一個(gè)5D張量:

(10,4500,1920,1080,3)

實(shí)際上這個(gè)例子太瘋狂了!

這個(gè)張量的大是很荒謬的,超過(guò)1TB。我們姑且考慮下這個(gè)例子以便說(shuō)明一個(gè)問(wèn)題:在現(xiàn)實(shí)世界中,我們有時(shí)需要盡可能的縮小樣本數(shù)據(jù)以方便的進(jìn)行處理計(jì)算,除非你有無(wú)盡的時(shí)間。

這個(gè)5D張量中值的數(shù)量為:

10 x 4500 x 1920 x 1080 x 3 = 279,936,000,000

在Keras中,我們可以用一個(gè)叫dype的數(shù)據(jù)類型來(lái)存儲(chǔ)32bits或64bits的浮點(diǎn)數(shù)

我們5D張量中的每一個(gè)值都將用32 bit來(lái)存儲(chǔ),現(xiàn)在,我們以TB為單位來(lái)進(jìn)行轉(zhuǎn)換:

279,936,000,000 x 32 = 8,957,952,000,000

這還只是保守估計(jì),或許用32bit來(lái)儲(chǔ)存根本就不夠(誰(shuí)來(lái)計(jì)算一下如果用64bit來(lái)存儲(chǔ)會(huì)怎樣),所以,減小你的樣本吧朋友。

事實(shí)上,我舉出這最后一個(gè)瘋狂的例子是有特殊目的的。我們剛學(xué)過(guò)數(shù)據(jù)預(yù)處理和數(shù)據(jù)壓縮。你不能什么工作也不做就把大堆數(shù)據(jù)扔向你的AI模型。你必須清洗和縮減那些數(shù)據(jù)讓后續(xù)工作更簡(jiǎn)潔更高效。

降低分辨率,去掉不必要的數(shù)據(jù)(也就是去重處理),這大大縮減了幀數(shù),等等這也是數(shù)據(jù)科學(xué)家的工作。如果你不能很好地對(duì)數(shù)據(jù)做這些預(yù)處理,那么你幾乎做不了任何有意義的事。

到此,關(guān)于“張量tensor是什么”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注億速云網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI