張量(Tensor)、標(biāo)量(scalar)、向量(vector)、矩陣(matrix)
Python Numpy 切片和索引(高級(jí)索引、布爾索引、花式索引)
Python NumPy 廣播(Broadcast)
張量(Tensor):Tensor = multi-dimensional array of numbers 張量是一個(gè)多維數(shù)組,它是標(biāo)量,向量,矩陣的高維擴(kuò)展 ,是一個(gè)數(shù)據(jù)容器,張量是矩陣向任意維度的推廣
注意,張量的維度(dimension)通常叫作軸(axis), 張量軸的個(gè)數(shù)也叫作階(rank)]
標(biāo)量(scalar):只有一個(gè)數(shù)字的張量叫標(biāo)量(也叫標(biāo)量張量、零維張量
、0D 張量)
x = np.array(12)
print(x.ndim) 可以用 ndim 屬性來查看一個(gè) Numpy 張量的軸的個(gè)數(shù)。標(biāo)量張量有 0 個(gè)軸( ndim == 0 )。
向量(vector):數(shù)字組成的數(shù)組叫作向量(vector)或一維張量
(1D 張量)。一維張量只有一個(gè)軸。下面是一個(gè) Numpy 向量
np.array([12, 3, 6, 14, 7])
這個(gè)向量有 5 個(gè)元素,所以被稱為 5D 向量。不要把 5D 向量和 5D 張量弄混! 5D 向量只有一個(gè)軸,沿著軸有 5 個(gè)維度,而 5D 張量有 5 個(gè)軸(沿著每個(gè)軸可能有任意個(gè)維度)
矩陣(matrix):是一個(gè)按照長方陣列排列的復(fù)數(shù)或?qū)崝?shù)集合,矩陣是二維張量
(2D 張量)
np.array([[5, 78, 2, 34, 0], [6, 79, 3, 35, 1], [7, 80, 4, 36, 2]])
向量組成的數(shù)組叫作矩陣(matrix)或二維張量(2D 張量)。矩陣有 2 個(gè)軸(通常叫作行和列)。你可以將矩陣直觀地理解為數(shù)字組成的矩形網(wǎng)格。下面是一個(gè) Numpy 矩陣。
3D 張量
與n 維張量
將多個(gè)矩陣組合成一個(gè)新的數(shù)組,可以得到一個(gè) 3D 張量,你可以將其直觀地理解為數(shù)字組成的立方體。下面是一個(gè) Numpy 的 3D 張量。
np.array([[[5, 78, 2, 34, 0],
[6, 79, 3, 35, 1],
[7, 80, 4, 36, 2]],
[[5, 78, 2, 34, 0],
[6, 79, 3, 35, 1],
[7, 80, 4, 36, 2]],
[[5, 78, 2, 34, 0],
[6, 79, 3, 35, 1],
[7, 80, 4, 36, 2]]])
將多個(gè) 3D 張量組合成一個(gè)數(shù)組,可以創(chuàng)建一個(gè) 4D 張量,以此類推。深度學(xué)習(xí)處理的一般是 0D 到 4D 的張量,但處理視頻數(shù)據(jù)時(shí)可能會(huì)遇到 5D 張量。
張量屬性
張量是由以下三個(gè)關(guān)鍵屬性來定義的。
- 軸的個(gè)數(shù)(階):例如,3D 張量有 3 個(gè)軸,矩陣有 2 個(gè)軸。這在 Numpy 等 Python 庫中也叫張量的 ndim 。
- 形狀(shape):這是一個(gè)整數(shù)元組,表示張量沿每個(gè)軸的維度大?。ㄔ貍€(gè)數(shù))。例如,前面矩陣示例的形狀為 (3, 5) ,3D 張量示例的形狀為 (3, 3, 5) 。向量的形狀只包含一個(gè)元素,比如 (5,) ,而標(biāo)量的形狀為空,即 () 。(張量的形狀)
- 數(shù)據(jù)類型(dtype):這是張量中所包含數(shù)據(jù)的類型,例如,張量的類型可以是 float32 、 uint8 、 float64 等。在極少數(shù)情況下,你可能會(huì)遇到字符( char )張量。注意:Numpy(以及大多數(shù)其他庫)中不存在字符串張量,因?yàn)閺埩看鎯?chǔ)在預(yù)先分配的連續(xù)內(nèi)存段中,而字符串的長度是可變的,無法用這種方式存儲(chǔ)。
data:????Tensor的值;
dtype:????Tensor的數(shù)據(jù)類型;
shape:????Tensor的形狀;
device:????Tensor所在的設(shè)備(CPU/GPU);
requires_grad:????是否需要梯度;
grad:????Tensor的梯度;
grad_fn:????創(chuàng)建Tensor的函數(shù);
is_leaf:????是否是葉子節(jié)點(diǎn)
數(shù)據(jù)張量
向量數(shù)據(jù):2D 張量,形狀為 (samples, features)
這是最常見的數(shù)據(jù)。對(duì)于這種數(shù)據(jù)集,每個(gè)數(shù)據(jù)點(diǎn)都被編碼為一個(gè)向量,因此一個(gè)數(shù)據(jù)批量就被編碼為 2D 張量(即向量組成的數(shù)組),其中第一個(gè)軸是樣本軸,第二個(gè)軸是特征軸。
例子:
- 人口統(tǒng)計(jì)數(shù)據(jù)集,其中包括每個(gè)人的年齡、郵編和收入。每個(gè)人可以表示為包含 3 個(gè)值的向量,而整個(gè)數(shù)據(jù)集包含 100 000 個(gè)人,因此可以存儲(chǔ)在形狀為 (100000, 3) 的 2D張量中。
- 文本文檔數(shù)據(jù)集,我們將每個(gè)文檔表示為每個(gè)單詞在其中出現(xiàn)的次數(shù)(字典中包含20 000 個(gè)常見單詞)。每個(gè)文檔可以被編碼為包含 20 000 個(gè)值的向量(每個(gè)值對(duì)應(yīng)于字典中每個(gè)單詞的出現(xiàn)次數(shù)),整個(gè)數(shù)據(jù)集包含 500 個(gè)文檔,因此可以存儲(chǔ)在形狀為(500, 20000) 的張量中。
時(shí)間序列數(shù)據(jù)或序列數(shù)據(jù):3D 張量,形狀為 (samples, timesteps, features)
當(dāng)時(shí)間(或序列順序)對(duì)于數(shù)據(jù)很重要時(shí),應(yīng)該將數(shù)據(jù)存儲(chǔ)在帶有時(shí)間軸的 3D 張量中。每個(gè)樣本可以被編碼為一個(gè)向量序列(即 2D 張量),因此一個(gè)數(shù)據(jù)批量就被編碼為一個(gè) 3D 張量(見下圖)
根據(jù)慣例,時(shí)間軸始終是第 2 個(gè)軸(索引為 1 的軸)。
我們來看幾個(gè)例子。
- 股票價(jià)格數(shù)據(jù)集。每一分鐘,我們將股票的當(dāng)前價(jià)格、前一分鐘的最高價(jià)格和前一分鐘的最低價(jià)格保存下來。因此每分鐘被編碼為一個(gè) 3D 向量,整個(gè)交易日被編碼為一個(gè)形狀為 (390, 3) 的 2D 張量(一個(gè)交易日有 390 分鐘),而 250 天的數(shù)據(jù)則可以保存在一個(gè)形狀為 (250, 390, 3) 的 3D 張量中。這里每個(gè)樣本是一天的股票數(shù)據(jù)。
- 推文數(shù)據(jù)集。我們將每條推文編碼為 280 個(gè)字符組成的序列,而每個(gè)字符又來自于 128個(gè)字符組成的字母表。在這種情況下,每個(gè)字符可以被編碼為大小為 128 的二進(jìn)制向量(只有在該字符對(duì)應(yīng)的索引位置取值為 1,其他元素都為 0)。那么每條推文可以被編碼為一個(gè)形狀為 (280, 128) 的 2D 張量,而包含 100 萬條推文的數(shù)據(jù)集則可以存儲(chǔ)在一個(gè)形狀為 (1000000, 280, 128) 的張量中。
圖像:3D 張量 形狀為 (height,width,channels)
圖像通常具有三個(gè)維度:高度、寬度和通道。通常通道為3=R、G、B
圖像:4D張量,形狀為 (samples, height, width, channels) 或 (samples, channels,height, width) 。
圖像通常具有三個(gè)維度:高度、寬度和顏色深度。雖然灰度圖像(比如 MNIST 數(shù)字圖像)只有一個(gè)顏色通道,因此可以保存在 2D 張量中,但按照慣例,圖像張量始終都是 3D 張量,灰度圖像的彩色通道只有一維。因此,如果圖像大小為 256×256,那么 128 張灰度圖像組成的批量可以保存在一個(gè)形狀為 (128, 256, 256, 1) 的張量中,而 128 張彩色圖像組成的批量則可以保存在一個(gè)形狀為 (128, 256, 256, 3) 的張量中。
圖像張量的形狀有兩種約定:通道在后(channels-last)的約定(在 TensorFlow 中使用)和通道在前(channels-first)的約定(在 Theano 中使用)。Google 的 TensorFlow 機(jī)器學(xué)習(xí)框架將顏色深度軸放在最后: (samples, height, width, color_depth) 。與此相反,Theano將圖像深度軸放在批量軸之后: (samples, color_depth, height, width) 。如果采用 Theano 約定,前面的兩個(gè)例子將變成 (128, 1, 256, 256) 和 (128, 3, 256, 256) 。Keras 框架同時(shí)支持這兩種格式。
如下圖所示是一張普通的水果圖片,按照RGB三原色表示,其可以拆分為紅色、綠色和藍(lán)色的三張灰度圖片,如果將這種表示方法用張量的形式寫出來,就是圖中最下方的那張表格
圖中只顯示了前5行、320列的數(shù)據(jù),每個(gè)方格代表一個(gè)像素點(diǎn),其中的數(shù)據(jù)[1.0, 1.0, 1.0]即為顏色。假設(shè)用[1.0, 0, 0]表示紅色,[0, 1.0, 0]表示綠色,[0, 0, 1.0]表示藍(lán)色,那么如圖所示,前面5行的數(shù)據(jù)則全是白色
用四階張量表示一個(gè)包含多張圖片的數(shù)據(jù)集,其中的四個(gè)維度分別是:圖片在數(shù)據(jù)集中的編號(hào),圖片高度、寬度,以及色彩數(shù)據(jù)。
視頻:5D張量,形狀為 (samples, frames, height, width, channels) 或 (samples,frames, channels, height, width)
視頻數(shù)據(jù)是現(xiàn)實(shí)生活中需要用到 5D 張量的少數(shù)數(shù)據(jù)類型之一。視頻可以看作一系列幀,每一幀都是一張彩色圖像。由于每一幀都可以保存在一個(gè)形狀為 (height, width, color_depth) 的 3D 張量中,因此一系列幀可以保存在一個(gè)形狀為 (frames, height, width,color_depth) 的 4D 張量中,而不同視頻組成的批量則可以保存在一個(gè) 5D 張量中,其形狀為(samples, frames, height, width, color_depth) 。
舉個(gè)例子,一個(gè)以每秒 4 幀采樣的 60 秒 YouTube 視頻片段,視頻尺寸為 144×256,這個(gè)視頻共有 240 幀。4 個(gè)這樣的視頻片段組成的批量將保存在形狀為 (4, 240, 144, 256, 3)的張量中??偣灿?106 168 320 個(gè)值!如果張量的數(shù)據(jù)類型( dtype )是 float32 ,每個(gè)值都是32 位,那么這個(gè)張量共有 405MB。好大!你在現(xiàn)實(shí)生活中遇到的視頻要小得多,因?yàn)樗鼈儾灰詅loat32 格式存儲(chǔ),而且通常被大大壓縮,比如 MPEG 格式。文章來源:http://www.zghlxwxcb.cn/news/detail-438304.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-438304.html
到了這里,關(guān)于張量(Tensor)、標(biāo)量(scalar)、向量(vector)、矩陣(matrix)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!