資料儲存在多維
numpy
陣列中,也叫張量
(tensor)。一般來說,當前所 有機器學習系統都使用張量作為基本資料結構。
張量這一概念的核心在於,它是乙個資料容器。它包含的資料幾乎總是數值資料,因此它
是數字的容器。你可能對矩陣很熟悉,它是二維張量。張量是矩陣向任意維度的推廣[注意,張量的維度
(dimension)通常叫作軸(axis)]。
僅包含乙個數字的張量叫作標量(
scalar
,也叫標量張量、零維張量、
0d 張量)。在
numpy 中,乙個 float32
或 float64
的數字就是乙個標量張量(或標量陣列)。可以用
ndim 屬性來檢視乙個 numpy
張量的軸的個數。標量張量有
0 個軸(
ndim == 0
)。張量軸的個數也叫作 階(
rank
)。下面是乙個
numpy 標量
。
>>> import numpy as np
>>> x = np.array(12)
>>> x
array(12)
>>> x.ndim
0
數字組成的陣列叫作向量(vector)或一維張量(1d張量)。一維張量只有乙個軸。下面是 乙個 numpy
向量。
>>> x = np.array([12, 3, 6, 14, 7])
>>> x
array([12, 3, 6, 14, 7])
>>> x.ndim
1
這個向量有
5 個元素,所以被稱為
5d 向量
。但不要把
5d向量和
5d張量弄混!
5d 向量只 有乙個軸,沿著軸有 5
個維度,而
5d 張量有
5 個軸(沿著每個軸可能有任意個維度)。
維度 (dimensionality
)可以表示沿著某個軸上的元素個數(比如
5d 向量),也可以表示張量中軸的個數(比如 5d 張量)
向量組成的陣列叫作矩陣
(matrix)或二維張量(2d張量)。矩陣有
2 個軸(通常叫作
行和 列)。你可以將矩陣直觀地理解為數字組成的矩形網格。下面是乙個 numpy 矩陣。
>>> x = np.array([[5, 78, 2, 34, 0],
[6, 79, 3, 35, 1],
[7, 80, 4, 36, 2]])
>>> x.ndim
2
將多個矩陣組合成乙個新的陣列,可以得到乙個
3d 張量,你可以將其直觀地理解為數字 組成的立方體。下面是乙個 numpy
的 3d 張量。
>>> x = 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]]])
>>> x.ndim
3
將多個
3d 張量組合成乙個陣列,可以建立乙個
4d 張量,以此類推。深度學習處理的一般 是 0d
到 4d
5d 張量。
張量是由以下三個關鍵屬性來定義的:
使用語法
train_images[i] 來選擇
沿著第乙個軸的特定數字。選 擇張量的特定元素叫作張量切片。
選擇第
10~100
個數字(這裡的數字是指資料集中手寫數字的張量表示)(不包括第
100
個),並將其放在形狀為
(90, 28, 28) 的陣列中。
>>> my_slice = train_images[10:100]
>>> print(my_slice.shape)
(90, 28, 28)
上面的寫法等價於下面的兩種寫法:
給出了切片沿著每個張量軸的起始索引和結束索引。「 : 」
等同於選擇整個軸。
>>> my_slice = train_images[10:100, :, :]
>>> my_slice.shape
(90, 28, 28)
>>> my_slice = train_images[10:100, 0:28, 0:28]
>>> my_slice.shape
(90, 28, 28)
也可以沿著每個張量軸在任意兩個索引之間進行選擇。例如,你可以在所有影象的右下角選出 14
畫素×14
畫素的區域:
my_slice = train_images[:, 14:, 14:]
也可以使用負數索引。與
python
列表中的負數索引類似,它表示與當前軸終點的相對位置。
你可以在影象中心裁剪出 14
畫素×14
畫素的區域:
my_slice = train_images[:, 7:-7, 7:-7]
深度學習模型不會同時處理整個資料集,而是將資料拆分成小批量。具體來看,下 面是 mnist
資料集的乙個批量,批量大小為
128。
batch = train_images[:128]
然後是下乙個批量。
batch = train_images[128:256]
然後是第
n 個批量。
batch = train_images[128 * n:128 * (n + 1)]
對於這種批量張量,第乙個軸(
0 軸)叫作批量軸或批量維度。
神經網路入門 神經元演算法
目前機器學習 深度學習在業界使用的越來越廣泛,做為乙個有著技術追求的it人,我覺得有必要學習和了解一下這塊的知識,今天就從最簡單的單層神經網路開始介紹。在介紹人工神經網路之前,首先認知下神經元。神經元不知道大家還有印象這個圖嗎?這個是出現在我們生物課本中的一幅圖。乙個神經元的組成基本就是上圖這些東西...
神經網路基礎及Keras入門
神經網路定義 人工神經網路,簡稱神經網路,在機器學習和認知科學領域,是一種模仿生物神經網路 動物的中樞神經系統,特別是大腦 的結構和功能的數學模型或計算模型,用於對函式進行估計或近似。為了描述神經網路,我們先從最簡單的神經網路講起,這個神經網路僅由乙個 神經元 構成,以下即是這個 神經元 的圖示 可...
神經網路的資料表示
深度學習中的資料儲存在多維numpy陣列中,也叫張量 tensor 一般來說,當前所有機器學習系統都使用張量作為基本的資料結構。張量對這個領域非常重要,重要到google 的tensorflow 都以它來命名。那麼什麼是張量?張量這一概念的核心在於,它是乙個資料容器。它包含的資料幾乎總是數值資料,因...