动手学深度学习---基本操作

数据操作

创建NDArray

NDArray和numpy很像,都是一些基础的数据结构。首先要把环境配好,具体配环境的话就不赘述了。

1、利用arange函数创建行向量
x = nd.arange(12)
直接看x是这个样子
在这里插入图片描述
2、创建各元素为1的张量
nd.ones((3,4))
3、创建指定数字的张量
Y = nd.array([[2, 1, 4, 3], [1, 2, 3, 4], [4, 3, 2, 1]])
4、生成正态分布的张量,前两个输入代表均值和标准差
nd.random.normal(0, 1, shape=(3, 4))
5、张量之间的拼接:
nd.concat(X,Y,dim=0)(dim=1就是按列拼接)
6、X==Y可以用来把对应位置元素相等的值取出来,相等的值为1,不相等的值为0
在这里插入图片描述
7、对张量中的所有元素求和
X.sum()
8、我们也可以把Y.exp()X.sum()X.norm()等分别改写为nd.exp(Y)nd.sum(X)nd.norm(X)等。
9、我们可以通过asscalar函数将结果变换为Python中的标量。下面例子中X L 2 L_2 L2范数结果同上例一样是单元素NDArray,但最后结果变换成了Python中的标量。
X.norm().asscalar()

索引

NDArray中,索引(index)代表了元素的位置。NDArray的索引从0开始逐一递增。例如,一个3行2列的矩阵的行索引分别为0、1和2,列索引分别为0和1。在下面的例子中,我们指定了NDArray的行索引截取范围[1:3]。依据左闭右开指定范围的惯例,它截取了矩阵X中行索引为1和2的两行。
在这里插入图片描述
我们可以指定NDArray中需要访问的单个元素的位置,如矩阵中行和列的索引,并为该元素重新赋值。
X[1, 2] = 9
当然,我们也可以截取一部分元素,并为它们重新赋值。在下面的例子中,我们为行索引为1的每一列元素重新赋值。
X[1:2, :] = 12

NDArray和NumPy相互变换

我们可以通过array函数和asnumpy函数令数据在NDArray和NumPy格式之间相互变换。下面将NumPy实例变换成NDArray实例。
import numpy as np
P = np.ones((2,3))
D = nd.array(P)
在这里插入图片描述
D.asnumpy()
在这里插入图片描述

自动求梯度

from mxnet import autograd
我们先看一个简单例子:对函数 y = 2 x ⊤ x y = 2\boldsymbol{x}^{\top}\boldsymbol{x} y=2xx 求关于列向量 x \boldsymbol{x} x 的梯度。我们先创建变量x,并赋初值。
x = nd.arange(4).reshape((4, 1))
在这里插入图片描述
为了求有关变量x的梯度,我们需要先调用attach_grad函数来申请存储梯度所需要的内存。
x.attach_grad()
下面定义有关变量x的函数。为了减少计算和内存开销,默认条件下MXNet不会记录用于求梯度的计算。我们需要调用record函数来要求MXNet记录与求梯度有关的计算。

with autograd.record():
    y = 2 * nd.dot(x.T, x)

在这里插入图片描述
由于x的形状为(4, 1),y是一个标量。接下来我们可以通过调用backward函数自动求梯度。需要注意的是,如果y不是一个标量,MXNet将默认先对y中元素求和得到新的变量,再求该变量有关x的梯度。
y.backward()
函数 y = 2 x ⊤ x y = 2\boldsymbol{x}^{\top}\boldsymbol{x} y=2xx 关于 x \boldsymbol{x} x 的梯度应为 4 x 4\boldsymbol{x} 4x。现在我们来验证一下求出来的梯度是正确的。
在这里插入图片描述

训练模式和预测模式

从上面可以看出,在调用record函数后,MXNet会记录并计算梯度。此外,默认情况下autograd还会将运行模式从预测模式转为训练模式。这可以通过调用is_training函数来查看。
在这里插入图片描述

  • MXNet提供autograd模块来自动化求导过程。
  • MXNet的autograd模块可以对一般的命令式程序进行求导。
  • MXNet的运行模式包括训练模式和预测模式。我们可以通过autograd.is_training()来判断运行模式。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值