一.導言
本教程適合對人工智能有一定的了解的同學,特別是對實際使⽤深度學習感興趣的⼤學⽣、⼯程師和研究⼈員。但本教程並不要求你有任何深度學習或者機器學習的背景知識,我們將從頭開始解釋每⼀個概念。雖然深度學習技術與應⽤的闡述涉及了數學和編程,但你只需了解基礎的數學和編程,例如基礎的線性代數、微分和概率,以及基礎的 Python 編程本教程將全⾯介紹深度學習從模型構造到模型訓練的⽅⽅⾯⾯,以及它們在計算機視覺和⾃然語⾔處理中的應⽤。我們不僅將闡述算法原理,還將基於 Apache MXNet 來演⽰它們的實現和運⾏。如果你之前沒有接觸過 Python,可以參考中⽂教程http://www.runoob.com/python/python-tutorial.html 或英⽂教程 http://learnpython.org/ 。當然,如果你只對本教程中的數學部分感興趣,你可以忽略掉編程部分,反之亦然。
二.安裝
由於筆者本人用的是windows操作系統,因此只需要在windows命令行界面的模式下輸入:
pip install mxnet
於是很快就可以安裝完成了,如果不能安裝的話,我們可以采用游俠加速器,在電腦上安裝這個加速器,注冊登錄之后就可以使用了。這個加速器是可以免費使用一天的,之后的話基本上是一個月30元,對於學習計算機的朋友來說也並不是很貴,可以左轉到百度搜索下載游俠加速器即可。
三.1:數據操作
在深度學習中,我們通常會頻繁地對數據進⾏操作。作為動⼿學深度學習的基礎,本節將介紹如何對內存中的數據進⾏操作。在MXNet中,NDArray是存儲和變換數據的主要⼯具,數據操作對於我們之后的學習相當重要。如果你之前⽤過NumPy,你會發現NDAr-ray 和 NumPy 的多維數組⾮常類似。然而,NDArray 提供 GPU 計算和⾃動求梯度等更多功能,這些使得 NDArray 更加適合深度學習。
首先我們從MXNet當中導入ndarray模塊,這里的nd是ndarray的縮寫形式。
我們輸入:
from mxnet import nd
然后我們使用arange函數創建一個行向量:
x = nd.arange(12)
輸出結果是:
[ 0. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.]
<NDArray 12 @cpu(0)>這時返回了⼀個 NDArray 實例,其中包含了從 0 開始的 12 個連續整數。從打印 x 時顯⽰的屬性<NDArray 12 @cpu(0)> 可以看出,它是⻓度為 12 的⼀維數組,且被創建在 CPU 主內存上。其中“@cpu(0)”⾥的 0 沒有特別的意義,並不代表特定的CPU核心。我們接下來通過shape函數來獲取這個對象的形狀:
x.shape
輸出:
(12,)
我們同時可以利用size屬性來得到這個對象實例當中總共的元素個數:
x.size
輸出:
12
下⾯使⽤ reshape 函數把⾏向量 x 的形狀改為(3,4),也就是⼀個 3 ⾏ 4 列的矩陣,並記作X,除了形狀不變之外,x當中的元素保持不變。
X = x.reshape((3, 4))
輸出:
[[ 0. 1. 2. 3.] [ 4. 5. 6. 7.] [ 8. 9. 10. 11.]] <NDArray 3x4 @cpu(0)>
接下來,我們來輸出一個張量(也就是三維的矩陣),並且讓矩陣當中的每一個元素均為零:
nd.zeros((2, 3, 4))
輸出結果:
[[[0. 0. 0. 0.] [0. 0. 0. 0.] [0. 0. 0. 0.]] [[0. 0. 0. 0.] [0. 0. 0. 0.] [0. 0. 0. 0.]]] <NDArray 2x3x4 @cpu(0)>
同時我們還可以創建各元素均為1的張量,輸入:
nd.ones((3, 4))
輸出:
[[1. 1. 1. 1.] [1. 1. 1. 1.] [1. 1. 1. 1.]] <NDArray 3x4 @cpu(0)>
我們也可以自定義我們要創建的NDArray當中的每一個元素的值:
Y = nd.array([[2, 1, 4, 3], [1, 2, 3, 4], [4, 3, 2, 1]])
輸出:
[[2. 1. 4. 3.] [1. 2. 3. 4.] [4. 3. 2. 1.]] <NDArray 3x4 @cpu(0)>
有些情況下,我們需要隨機⽣成 NDArray 中每個元素的值。下⾯我們創建⼀個形狀為(3,4)的NDArray。它的每個元素都隨機采樣於均值為 0 標准差為 1 的正態分布。
輸入:
nd.random.normal(0, 1, shape=(3, 4))
輸出:
[[ 2.2122064 0.7740038 1.0434405 1.1839255 ] [ 1.8917114 -1.2347414 -1.771029 -0.45138445] [ 0.57938355 -1.856082 -1.9768796 -0.20801921]] <NDArray 3x4 @cpu(0)>
三.2:運算
NDArray ⽀持⼤量的運算符(operator)。例如,我們可以對之前創建的兩個形狀為(3, 4)的NDArray 做按元素加法。所得結果形狀不變。
比如我們可以做這些矩陣運算:
1. X + Y
2. X * Y
3. X / Y
4. Y.exp()(矩陣的每個元素做指數運算)
輸出:
[[ 7.389056 2.7182817 54.59815 20.085537 ] [ 2.7182817 7.389056 20.085537 54.59815 ] [54.59815 20.085537 7.389056 2.7182817]] <NDArray 3x4 @cpu(0)>
除了按元素計算外,我們還可以使⽤ dot 函數做矩陣運算。下⾯將 X 與 Y 的轉置做矩陣乘法。由於 X 是 3 ⾏ 4 列的矩陣,Y 轉置為 4 ⾏ 3 列的矩陣,兩個矩陣相乘得到 3 ⾏ 3 列的矩陣。
nd.dot(X, Y.T)
輸出:
[[ 18. 20. 10.] [ 58. 60. 50.] [ 98. 100. 90.]] <NDArray 3x3 @cpu(0)>
這就是我們今天的數據操作的教程了,希望大家能夠親自上手試一試,才會有好的效果。