一、书籍简介
《动手学深度学习(PyTorch版)》这是一本深度学习领域教父级别的书籍,这也是第一版的重磅升级版本,选用了经典的PyTorch深度学习框架。
同时,本书也作为了几十所高校教材用书,可见这本书在学术界的地位,几乎是泰斗级的存在。
以下为不完整截图:
本书共有15个章节,可以分为3个部分。
第一部分包含预备知识和基础知识。(第1~4章)
第二部分主要讨论现代深度学习技术。(第5~10章)
第三部分讨论可伸缩性、效率和应用程序。(第11~15章)
大纲目录如下:
二、引言部分
本书的第一章为引言部分,主要是简单描述机器学习的相关概念:
1、机器学习的关键组件
2、机器学习的分类
3、深度学习的发展
4、深度学习的成功案例
由于这一章节以抽象的描述为主,稍微过一遍即可,也就不再做过多的介绍了。
三、预备知识
深度学习需要掌握一些基本的技能,所有机器学习方法都涉及从数据中提取信息。因此,这部分主要讲解的是数据处理的一些常用的实用技能,包括存储、操作和数据预处理。
主要分为如下几个部分:
1、数据操作
数据操作主要介绍PyTorch中对张量的处理,下面直接来看一些例子。
张量定义:
import torch
x = torch.arange(12)
print(x)
输出:
tensor([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
查看张量的形状:
print(x.shape)
输出:
torch.Size([12])
改变张量的形状:
X = x.reshape(3, 4)
print( X)
输出:
tensor([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
还有很多其它的方法可以很方便的定义张量和对张量进行变换。
pytorch还支持很多的运算符,比如常用的有加减乘除,乘方等等。
例如:
x = torch.tensor([1.0, 2, 4, 8])
y = torch.tensor([2, 2, 2, 2])
x + y, x - y, x * y, x / y, x ** y # **运算符是求幂运算
输出:
tensor([ 3., 4., 6., 10.]) tensor([-1., 0., 2., 6.]) tensor([ 2., 4., 8., 16.]) tensor([0.5000, 1.0000, 2.0000, 4.0000]) tensor([ 1., 4., 16., 64.])
2、线性代数
标量由只有一个元素的张量表示。 下面的代码将实例化两个标量,并执行一些熟悉的算术运算,即加法、乘法、除法和指数。
x = torch.tensor(3.0)
y = torch.tensor(2.0)
print(x + y, x * y, x / y, x**y)
输出:
tensor(5.) tensor(6.) tensor(1.5000) tensor(9.)
向量可以被视为标量值组成的列表。 这些标量值被称为向量的元素(element)或分量(component)。 当向量表示数据集中的样本时,它们的值具有一定的现实意义。
人们通过一维张量表示向量。一般来说,张量可以具有任意长度,取决于机器的内存限制。
我们可以使用下标来引用向量的任一元素,例如可以通过xi来引用第i个元素。
import torch
x = torch.arange(4)
print(x[3])
输出:
tensor(3)
向量的长度:
len(x)
输出:
4
正如向量将标量从零阶推广到一阶,矩阵将向量从一阶推广到二阶。 矩阵,我们通常用粗体、大写字母来表示 (例如,X、Y和Z), 在代码中表示为具有两个轴的张量。
A = torch.arange(20).reshape(5, 4)
A
输出:
tensor([[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11], [12, 13, 14, 15], [16, 17, 18, 19]])
作为方阵的一种特殊类型,对称矩阵(symmetric matrix)A等于其转置:A=A⊤。 这里定义一个对称矩阵B:
B = torch.tensor([[1, 2, 3], [2, 0, 4], [3, 4, 5]])
B
输出:
tensor([[1, 2, 3], [2, 0, 4], [3, 4, 5]])
就像向量是标量的推广,矩阵是向量的推广一样,我们可以构建具有更多轴的数据结构。 张量(本小节中的“张量”指代数对象)是描述具有任意数量轴的n维数组的通用方法。
多维张量:
X = torch.arange(24).reshape(2, 3, 4)
X
输出:
tensor([[[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11]], [[12, 13, 14, 15], [16, 17, 18, 19], [20, 21, 22, 23]]])
我们可以对任意张量进行的一个有用的操作是计算其元素的和。 数学表示法使用∑符号表示求和。
x = torch.arange(4, dtype=torch.float32)
x, x.sum()
输出:
(tensor([0., 1., 2., 3.]), tensor(6.))
点积:
y = torch.ones(4, dtype = torch.float32)
x, y, torch.dot(x, y)
输出:
(tensor([0., 1., 2., 3.]), tensor([1., 1., 1., 1.]), tensor(6.))
现在我们知道如何计算点积,可以开始理解矩阵-向量积(matrix-vector product)。
A.shape, x.shape, torch.mv(A, x)
输出:
(torch.Size([5, 4]), torch.Size([4]), tensor([ 14., 38., 62., 86., 110.]))
在掌握点积和矩阵-向量积的知识后, 那么矩阵-矩阵乘法(matrix-matrix multiplication)应该很简单。
B = torch.ones(4, 3)
torch.mm(A, B)
输出:
tensor([[ 6., 6., 6.], [22., 22., 22.], [38., 38., 38.], [54., 54., 54.], [70., 70., 70.]])
线性代数中最有用的一些运算符是范数(norm)。 非正式地说,向量的范数是表示一个向量有多大。 这里考虑的大小(size)概念不涉及维度,而是分量的大小。
深度学习中更经常地使用L2范数的平方,也会经常遇到L1范数,它表示为向量元素的绝对值之和
与L2范数相比,L1范数受异常值的影响较小。 为了计算L1范数,我们将绝对值函数和按元素求和组合起来。
torch.abs(u).sum()
输出:
tensor(7.)
3、微积分
这一节,主要有几个重点,导数,偏导数,梯度和链式法则。
导数,相信大家都很 熟悉了,导数其实就是变化率。
在深度学习中,函数通常依赖于许多变量。 因此,我们需要将微分的思想推广到多元函数(multivariate function)上。
在多元函数中,对其中某一个自变量的导数成为偏导数。
我们可以连结一个多元函数对其所有变量的偏导数,以得到该函数的梯度(gradient)向量。
链式法则:
4、概率
概率部分主要讲解了如下几个部分:
以上都是数学中学习过的概率统计的知识,在后边用到的时候再回过头来详细研究
现在研究着实太抽象和枯燥。
以上就是第二章预备知识的全部内容,相信有了这些数学基础,对后面的深度学习会有非常大的帮助。
本帖最后由 xinmeng_wit 于 2024-9-7 18:22 编辑
盯紧Wit,跟着Wit读一读。。。。。。。。。。。。。。。
引用: hellokitty_bean 发表于 2024-9-7 19:28 盯紧Wit,跟着Wit读一读。。。。。。。。。。。。。。。
感谢关注
引用: hellokitty_bean 发表于 2024-9-8 18:56 ha....................... 希望不要有压力。。。。。。。。。。。。。
亚历山大
引用: xinmeng_wit 发表于 2024-9-12 21:22 亚历山大
有压力就有动力