DeepLearning第一天

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/

 

上一篇:学习笔记——Splay


下一篇:第一次线性回归的训练