《动手学深度学习》个人学习笔记-第2章 预备知识

第2章 预备知识

2.2 数据操作

2.2.2 运算

dot函数可以做矩阵乘法:

nd.dot(x,y.T)  #矩阵x和矩阵y的转置做矩阵乘法

连结运算:

nd.concat(y,z,dim=1) #在维度1(列)上做连结运算,可以理解为拼接在一起
#如果参数dim=0, 则表示在行上做连结

条件判别式得到元素为0或1的新NDArray。如果x和y在相同位置的条件判断为真(值相等),那么新的NDArray在相同位置的值为1;反之为0:

x==y

对NDArray中所有元素求和得到只有一个元素的NDArray:

x.sum()

通过asscalar函数将结果变换为python中的标量

x.norm().asscalar() #将x的L2范数变换成python中的标量

2.2.3 广播机制

对形状不同的NDArray按元素运算时,会触发广播机制:先适当复制元素使这两个NDArray形状相同后再按元素运算。

2.2.4 索引

索引代表元素位置。NDArray的索引从0开始逐一递增。根据 左闭右开 指定范围,例如行索引截取范围[1:3],则截取矩阵中行索引为1和2的两行。

x[1:3] #行索引 
x[:,1:3] #列索引

2.2.6 NDArray和NumPy相互变换

通过array函数和asnumpy函数令数据再NDArray和NumPy格式之间相互变换

#numpy转NDArray
import numpy as np
p=np.ones((3,4))
x=nd.array(p)
#NDArray转numpy
y=x.asnumpy()

2.3 自动求梯度

对函数 y = 2 x T x y = 2x^Tx y=2xTx求关于列向量x的梯度。

1.为了减少计算和内存开销,默认条件下MXNet不会记录用于求梯度的计算。我们需要调用record函数记录有关计算。
2.由于x的形状是(4,1),所以y是一个标量。如果y不是一个标量,MXNet将默认先对y中元素求和得到新的变量,再求该变量有关x的梯度。

#调用attach_grad()函数来申请存储梯度所需要的内存
x.attach_grad()
print(x)

#调用record函数来要求MXNet记录与求梯度有关的计算
with autograd.record():
    y=2*nd.dot(x.T,x)
    
#调用backward函数自动求梯度

y.backward()

assert (x.grad - 4*x).norm().asscalar()==0
print(x.grad)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值