書中使用的是mxnet作為學習框架
在mxnet中,ndarray是乙個類,也是儲存和變換資料的主要工具。建立儲存資料基本上都用到這個類。
from mxnet import nd # 匯入首先從mxnet匯入ndarray模組
『』『常用的用法』『』
x = nd.arange(12) #建立乙個順序的行向量,[ 0. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.]
x = x.reshape((3, 4)) #更改為3行4列的矩陣
『』『out:
[[ 0. 1. 2. 3.]
[ 4. 5. 6. 7.]
[ 8. 9. 10. 11.]]』『』
y = nd.array([[2, 1, 4, 3], [1, 2, 3, 4], [4, 3, 2, 1]]) #建立三行四列的矩陣
nd.random.normal(0, 1, shape=(3, 4)) #均值為1, 方差為1的隨機矩陣
#常見運算
x + y
''' out :
[[ 2. 2. 6. 6.]
[ 5. 7. 9. 11.]
[12. 12. 12. 12.]]
'''nd.dot(x, y.t)
out:
[[ 18. 20. 10.]
[ 58. 60. 50.]
[ 98. 100.90.]]
#廣播機制
#當對兩個形狀不同的ndarray按
#元素運算時,可能會觸發廣播(broadcasting)機制:先適當複製元素使這兩個ndarray形狀相
#同後再按元素運算。
a = nd.arange(3).reshape((3, 1))
b = nd.arange(2).reshape((1, 2))
a + b
'''out:
[[0. 1.]
[1. 2.]
[2. 3.]]
'''#索引元素
#依據**左閉右開**指定範圍的慣例,它擷取了矩陣x中行索引為1和2的兩行。
x[1:3]
'''out:
[[ 4. 5. 6. 7.]
[ 8. 9. 10. 11.]]
'''#單個元素賦值
x[1, 2] = 9
'''[[ 0. 1. 2. 3.]
[ 4. 5. 9. 7.]
[ 8. 9. 10. 11.]]
'''#對某一行賦值
x[1:2, :] = 12
'''[[ 0. 1. 2. 3.]
[12. 12. 12. 12.]
[ 8. 9. 10. 11.]]
'''
#和numpy相互轉換
import numpy as np
p = np.ones((2, 3))
d = nd.array(p) #ndarray轉numpy
'''out:
[[1. 1. 1.]
[1. 1. 1.]]
'''d.asnumpy() # ndarray變換成numpy
和其他框架一樣的是mxnet提供了自動求梯度的函式
from mxnet import autograd, nd
#例子,對函式 y = 2x*x 求關於列向量 x 的梯度
x = nd.arange(4).reshape((4, 1))
x.attach_grad() #為了求有關變數x的梯度,我們需要先呼叫attach_grad函式來申請儲存梯度所需要的記憶體
with autograd.record():
y = 2 * nd.dot(x.t, x) #為了減少計算和記憶體開銷,預設條件下mxnet不會記錄用於求梯度的計算。我們需要呼叫record函式來要求mxnet記錄與求梯度有關的計算。
y.backward()
x.grad
『』『[[ 0.]
[ 4.]
[ 8.]
[12.]]
』『』
動手學深度學習筆記(1)
機器學習,神經網路是很多領域共同發展的成果。時至今日,絕大多數神經網路都包含以下的核心原則 深度學習從發現到發展,仍能屹立的部分原因 在機器學習的眾多研究方向中,表徵學習關注如何自動找出表示資料的合適方式,以便更好地將輸入變換為正確的輸出。深度學習是具有多級表示的表徵學習方法。在每一級 從原始資料開...
動手學深度學習
線性回歸的基本要素 模型 為了簡單起見,這裡我們假設 只取決於房屋狀況的兩個因素,即面積 平方公尺 和房齡 年 接下來我們希望探索 與這兩個因素的具體關係。線性回歸假設輸出與各個輸入之間是線性關係 price warea area wage age b price warea area wage a...
動手學深度學習打卡筆記1
資料基礎 張量和梯度 tensor 張量 可以看成是乙個多維陣列。標量是0維張量,向量是1維張量,矩陣則是2維張量。在深度學習中涉及到大量的矩陣和向量的相互計算 向量計算的速度更快 在pytorch中,torch.tensor是儲存和變換資料的主要工具。除了基本的矩陣向量 同形 的計算之外,對於不同...