在MXNet中,NDArray是一个类,也是存储和交换数据的主要工具。NDArray和Numpy的多维数组非常类似,NDArray提供GPU计算和自动求梯度等更多功能。
数据操作
首先,从MXNet中导入ndarray模块。
使用shape属性获取NDArray实例的形状,也可以通过size属性得到NDArray实例中的元素的总数。
下面使用reshape函数把行向量x的形状改为(3,4),并记住X
使用zeros()创建零矩阵,使用ones来创建元素都为1的矩阵,除此之外,可以指定各个元素的值。
有时候,我们需要随即生成NDArray中每个元素的值。下面我们创建一个形状(3,4)的NDArray。它的每个元素都随机采样于均值为0,标准差为1的正态分布
使用sum(),可以对矩阵元素进行求和。
自动求梯度
在深度学习中,我们经常需要对函数求梯度(gradient)。
为了求有关变量x的梯度,我们需要先调用attach_grad函数来申请存储梯度所需要的内存。
如
x.attach_grad()
下面定义有关变量x的函数。为了减少计算和内存开销,默认条件下MXNet不会记录用于求梯度的计算。调用record函数来要求MXNet记录与求梯度有关的记录。
from mxnet import autograd,nd
x = nd.arange(4).reshape((4,1)) #4行1列
x.attach_grad() #开辟内存
with autograd.record():
y = 2*nd.dot(x.T,x) #y是一个标量
y.backward() #自动求梯度
assert(x.grad-4*x).norm().asscalar()==0 #求范式,用asscalar转换成标量,判断是否为0
x.grad
结果如下
未完待续