2021-07-18
#刘博的深度学习笔记
第一章
---
- 环境配置
- 获取代码
环境:
Windows0+Anaconda4.4.10
运行工具
win10: jupyter notebook
代码地址
https://zh.d2l.ai/d2l-zh-1.0.zip
理解
起源:
深度学习基于神经网络模型和数据编程的核心思想展开,绝大多数神经网络包含以下核心原则:
- 交替使用先行处理单元与非线性处理单元,他们经常被成为”**层**“。
- 使用链式法则(即反向传播)来更新网络的参数。
特点:
深度学习是具有多级表示的表特征学习方法,深度学习模型可以看作是由许多简单函数复合而成的函数。
其外在特点是端到端的训练,即将整个系统组建好之后一起训练,而并非单独调式。除此之外,我们也正在经历从含参数统计模型转向完全无参数的模型,使得我们可以得到更精准的模型。
第二章
学习如何使用NDArray对数据经行处理
- 创建NDArray.
- NDArray运算
- 索引
- NDArray和NumPy相互变换?
创建NDArray
# 从MXNet导入ndarray模块 from mxnet import nd #创建一个0~12的连续整数 x=nd.arange(12) # 获取矩阵形状 x.shape # 获取矩阵元素的总数 x.size #行向量x的形状改为(3, 4),也就是一个3行4列的矩阵,并记作X。除了 形状改变之外,x中的元素保持不变 X= x.reshape(3,4) #也可写成X.reshape((-1, 4))或X.reshape((3, -1))。由于x的元素个数是已知的,这里的-1是能够通过元素个数和 其他维度的大小推断出来的 # 创建一个全为0的3x4矩阵 nd.zeros((3,4)) # 创建一个全为1的3x4矩阵 nd.ones((3,4)) # Python的列表(list)指定需要创建的NDArray中每个元素的值 Y = nd.array([[2, 1, 4, 3], [1, 2, 3, 4], [4, 3, 2, 1]]) #随机生成NDArray中每个元素的值。下面我们创建一个形状为(3,4)的NDArray。它的每个元素都随机采样于均值为0、标准差为1的正态分布 nd.random.normal(0, 1, shape=(3, 4))
NDArray与运算
#指数运算符 Y.exp() # 使用dot函数做矩阵乘法。下面将X与Y的转置做矩阵乘法。由于X是3行4列的矩阵,Y转置为4行3列的矩阵,因此两个矩阵相乘得到3行3列的矩阵 z = nd.dot(X, Y.T) #将多个NDArray连结(concatenate)。下面分别在行上(维度0,即形状中的最左边元素)和列上(维度1, 即形状中左起第二个元素) 连结两个矩阵。可以看到,输出的第一个NDArray在维度0的⻓度(6)为两个输入矩阵在维度0的⻓度之和(3 + 3) ,而输出的第二个NDArray在维 度1的⻓度(8)为两个输入矩阵在维度1的⻓度之和(4 + 4) nd.concat(X, Y, dim=0), nd.concat(X, Y, dim=1) # 矩阵内所有元素求和 X.sum() #asscalar函数可将结果转变为python中的标量 X.norm().asscalar() #Y.exp()、X.sum()、X.norm()等也可分别改写为nd.exp(Y)、nd.sum(X)、nd.norm(X)等。 #当两个NDArray形状不同时,会触发广播机制:适当复制元素使得两个形状相同在进行运算。
索引
NDArray的索引从0开始逐一递增,依据**左闭右开**的原则
#取第1和第2行 X[1:3] #将第1行第2列元素赋值为9 X[1, 2] = 9 #将行索引1行的每一列元素重新赋值为12 X[1:2, :] = 12
NDArray和NumPy相互变换
# np->nd import numpy as np P = np.ones((2, 3)) D = nd.array(P) # nd->np D.asnumpy() ``` ####自动求梯度 ``` from mxnet import autograd,nd #调用attach_grad函数来申请梯度所需内存 x.attach_grad() #调用record函数记录与求梯度有关的计算 with augotard.record(): #调用backward函数自动求梯度 y.backward() #验证梯度是否正确 assert(x.grad - 4*x).norm().asscalar()==0 x.grad
小结:
- MXNet提供了autograd模块来自动化求导过程
- MXNet的autograd模块可以对一般的命令式程序经行求导
- MXNet的运行模块包括训练模块和预测模块,我们可以通过autograd.is_training()来进行判断运行模式
查阅文档
#用dir函数可以查阅模板中用了什么函数和属性 print(dir(nd.random)) #用help函数可以查找特定函数和类的使用 help(nd.ones_like)
在mxnet网站上查阅:https://mxnet.apache.org/