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)>
复制代码
本文来自《动手学深度学习》预备知识的读书笔记