MXNet 中的庫 NDArray 相似於 NumPy,區別在於 NDArray 能夠利用 GPU 進行加速以及自動求梯度bash
from mxnet import nd
# 建立向量
x = nd.arange(12)
# 得到 x 的形狀
x.shape
# 得到 x 中的元素數
x.size
# 將 x 改成 3x4 的矩陣
X = x.reshape((3,4)) # x.reshape((-1,4)) or x.reshape((3,-1))
# 各元素都爲0,形狀爲 2,3,4 的張量
x = nd.zeros((2,3,4))
# 各元素爲 1 的張量
nd.ones((2,3,4))
# 使用 list 初始化
nd.array([[1,2,3],[4,5,6]])
# 產生均值爲0,標準差爲1的正態分佈
nd.random.normal(0,1,shape=(3,4))
複製代碼
按元素運算dom
# 按元素乘法
x * y
# 按元素除法
x / y
# 按元素加法
x + y
# 按元素作指數運算
x.exp()
複製代碼
矩陣乘法函數
# 假設X、Y矩陣均爲3行4列,則矩陣X與Y的轉置相乘的結果爲3行3列
nd.dot(X, Y.T)
複製代碼
矩陣鏈接學習
# 假設x和y都是3x4的矩陣,nd.concat將x和y連起來,dim=0表示擴展行
nd.concat(x, y, dim=0)
# dim=1表示擴展列
nd.concat(x, y, dim=1)
複製代碼
兩個同形狀的張量,能夠按相同位置進行比較、判斷是否相等,相等位1,不然爲0,返回新的張量spa
x == y
複製代碼
對全部元素求和,返回值依然是一個 NDArrayscala
x.sum()
複製代碼
能夠將上式返回的 NDarray 轉換爲一個標量code
x.sum().asscalar()
複製代碼
求標量中全部元素的L2範數(平方和再開更號)orm
x.norm()
複製代碼
不一樣形狀張量按元素運算,先複製元素使它們形狀相同,再進行計算對象
x = nd.arange(3).reshape((3,1))
y = nd.arange(2).reshape((1,2))
x + y
複製代碼
行或列的索引都從0開始,聽從左閉右開原則索引
# 得到某個元素,並從新賦值,第2行,第3列
X[1,2] = 9
# 獲取第二、3行的全部元素
X[1:3]
# 截取一部分元素(第二、3行的全部元素),並從新賦值
X[1:3,:] = 12
複製代碼
經過 array 將 NumPy 對象轉換爲 NDArray 對象
import numpy as np
P = np.ones((2,3))
D = nd.array(P)
D
複製代碼
將 NDArray 轉換爲 NumPy
D.asnumpy()
複製代碼
x 爲一個向量 ,關於 x 的函數 的梯度能夠表示爲
使用 MXNet 自動求梯度的步驟:
autograd
庫:from mxnet import autograd, nd
x.attach_grad()
,其中 x
爲參數,它是一個向量autograd.record()
,記錄求梯度的計算,默認狀況下 MXNet 不會記錄(可選)backward
函數自動求梯度例如咱們對 自動求梯度的代碼以下
from mxnet import autograd, nd
x = nd.arange(4).reshape((4,1))
x.attach_grad()
with autograd.record():
y = 2 * nd.dot(x.T, x)
y.backward()
x.grad
----
output:
[[ 0.]
[ 4.]
[ 8.]
[12.]]
<NDArray 4x1 @cpu(0)>
複製代碼
本文來自《動手學深度學習》預備知識的讀書筆記