动手学深度学习Chapter 1-2

深度学习简介

常规的系统功能仅用编程技巧即可实现。

对于一些仅用编程技巧无法解决的一些问题,比如识别猫。这类问题的解决关键在于图像理解,通过大量数据寻找同类数据的共有特征

⽬前的机器学习和深度学习应⽤共同的核⼼思想:“⽤数据编程”。

机器学习是一门将不同的函数形式大数据进行结合,利用大数据获取函数参数,解决实际问题的一门学科。研究如何使计算机系统利⽤经验改善性能。

深度学习是机器学习的一个分支,他的理论基础是神经网络。深度学习的形式通常是复杂的神经网络。深度学习是具有多级表示的表征学习⽅法。它可以逐级表示越来越抽象的概念或模式

深度学习起源

深度学习基于神经⽹络模型。核心思想是⽤数据编程。两者起源上个世纪。

大多神经网络的核心原则:

  • 交替使⽤线性处理单元与非线性处理单元,它们经常被称为“层”
  • 使用链式法则(即反向传播)来更新⽹络的参数。

深度学习发展

深度学习的发展一方面得益于计算力的提高;一方面得益于数据量增长,通过大量的数据寻找特征。

深度学习发展的部分原因:

  • 优秀的容量控制方法,如丢弃法。
  • 提出注意⼒机制,解决了在不增加参数的情况下扩展⼀个系统的记忆容量和复杂度。
  • 记忆⽹络和神经编码器—解释器
  • ⽣成对抗⽹络的发明
  • 多GPU并行计算
  • 深度学习框架

深度学习特点

  • 端到端的训练。
  • 含参数统计模型转向完全⽆参数的模型
  • 对非最优解的包容
  • 对非凸非线性优化的使⽤
  • 勇于尝试没有被证明过的方法

深度学习模仿人脑结构利弊:

虽然深度学习从生命的生物机理中获得灵感,但它与大脑的实际工作原理差别非常非常巨大。将它与大脑进行类比给它赋予了一些神奇的光环,这种描述是很危险的,这将导致天花乱坠的宣传,大家在要求一些不切实际的事情。

深度学习训练过程实际上还是拟合参数,但是人脑神经元的相互作用不一定是拟合参数。

预备知识

配置环境

—window10

  1. 下载anaconda和d2l-zh-1.0.zip
  2. 打开anaconda powershell prompt
  3. 配置清华PyPI镜像:pip config set global.index -url https://pypi.tuna.tsinghua.edu.cn/simple
  4. 创建运行环境:conda env create -f environment.yml
  5. 运行环境:conda activate gluon

—Linux

NDArray数据操作

mxnet的基础是对数据进行操作,NDArray类似NumPy,是MXNet中用于数据储存和变换的主要工具

#创建一个ndarray数组,⽤arange函数创建⼀个⾏向量
from mxnet import nd
x = nd.arange(12) 

NDArray的创建方法包括:

  • 通过python的list或者tuple直接指定值
  • 通过arange创建一维行向量之后reshape修改形状
  • 通过ones,zeros创建指定形状的张量
  • 通过nd.random生成随机值的张量,例如nd.random.normal生成的是正态分布的随机数

NDArray的运算方法:

  • ndarray的运算包括基本的加减乘初,不过要求参与运算的两个对象大小相同
  • ndarray提供dot函数计算张量的矩阵乘法。
  • ndarray提供concat函数支持多个张量连结
  • 条件运算==判断对应位置的值是否相等
  • ndarray提供sum函数计算特定维度的和,没有指定维度则计算所有元素的和
  • ndarray提供asscalar函数将结果变成标量

NDArray的广播机制:

广播机制针对两个形状不同的NDArray进行按元素进行运算。

广播机制原则
  • 输出的shape是输入中最大的值,输入的shape中不足的部分都通过在前面加1补齐
  • 输入数组要求shape上的每个位置要么是1要么和输出一致

NDArray索引:

通俗说:索引就是用冒号分隔开,对张量内元素进行定位查找或者修改。

x[:2]
#输出
[0. 1. 2.]
<NDArray 3 @cpu(0)>

NDArray与NumPy转化:

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

NDArray自动求梯度

步骤:

  1. 调⽤attach_grad函数来申请存储梯度所需要的内存
  2. 调⽤record函数来要求MXNet记录与求梯度有关的计算
  3. 通过调⽤backward函数⾃动求梯度
from mxnet import autograd, nd
x = nd.arange(4).reshape((4, 1))
x.attach_grad()
with autograd.record():
    y = 2 * nd.dot(x.T, x)
y.backward()
x.grad
#输出
[[ 0.]
 [ 4.]
 [ 8.]
 [12.]]
<NDArray 4x1 @cpu(0)>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值