主要是记录一下我自己的学习历程,简单、快速为主。

1. 序言、安装、符号、前言

我花了一个小时读完了这部分,这部分铺垫了一些宏观的知识,安装部分我没操作,打算后续使用自己的pycharm,符号部分看了一眼,以后记不住再来翻看。前言的监督学习部分写的比较好,对几中机器学习的任务介绍的好,可以看看。
2022年4月27日17点16分。
累计耗时1hour

2.预备知识

2.1 数据操作

2022年4月28日16点34分 耗时1hour

2.1.1 入门

张量(tensor)表示由一个数值组成的数组,这个数组可能有多个维度。 具有一个轴的张量对应数学上的向量(vector); 具有两个轴的张量对应数学上的矩阵(matrix); 具有两个轴以上的张量没有特殊的数学名称。
ps:tensorflow的tensor就是张量,合起来就是张量流。

2.1.2 运算符

X = torch.arange(12, dtype=torch.float32).reshape((3,4))
Y = torch.tensor([[2.0, 1, 4, 3], [1, 2, 3, 4], [4, 3, 2, 1]])
torch.cat((X, Y), dim=0), torch.cat((X, Y), dim=1)
# 输出(tensor([[ 0.,  1.,  2.,  3.],[ 4.,  5.,  6.,  7.],[ 8.,  9., 10., 11.],[ 2.,  1.,  4.,  3.],[ 1.,  2.,  3.,  4.],[ 4.,  3.,  2.,  1.]]), tensor([[ 0.,  1.,  2.,  3.,  2.,  1.,  4.,  3.],[ 4.,  5.,  6.,  7.,  1.,  2.,  3.,  4.],[ 8.,  9., 10., 11.,  4.,  3.,  2.,  1.]]))

英语翻译猜测!:
连接 concatenate
维度 dimension

2.1.3 广播机制

矩阵
a 3x1
b 1x2
a+b 3x2
就是复制一行(列)再运算。

2.1.4索引和切片

和python一样。
A[-1]
A[2,3]==A[2][3] 两种表示方法都可以。

2.1.5 节省内存

X[:] = X + Y
可以用id(X)查看内存地址。

2.1.6. 转换为其他Python对象

A = X.numpy()
B = torch.tensor(A)
type(A), type(B)
输出
(numpy.ndarray, torch.Tensor)
要将大小为1的张量转换为Python标量,我们可以调用item函数或Python的内置函数。大小不为1的张量调用item()会报错。

2.2 数据预处理

2022年4月28日17点05分 耗时 20mins

2.2.1. 读取数据集

查缺补漏:CSV(逗号分隔值)文件

import os

os.makedirs(os.path.join(‘…’, ‘data’), exist_ok=True)
data_file = os.path.join(‘…’, ‘data’, ‘house_tiny.csv’)
with open(data_file, ‘w’) as f:
f.write(‘NumRooms,Alley,Price\n’) # 列名
f.write(‘NA,Pave,127500\n’) # 每行表示一个数据样本
f.write(‘2,NA,106000\n’)
f.write(‘4,NA,178100\n’)
f.write(‘NA,NA,140000\n’)

import pandas as pd

data = pd.read_csv(data_file)
print(data)

输出
NumRooms Alley Price
0 NaN Pave 127500
1 2.0 NaN 106000
2 4.0 NaN 178100
3 NaN NaN 140000

2.2.2. 处理缺失值

“NaN”项代表缺失值
一般有插值法和删除法,这里用插值法演示。

2.2.3. 转换为张量格式

X, y = torch.tensor(inputs.values), torch.tensor(outputs.values)

2.2.4. 小结

pandas软件包是Python中常用的数据分析工具中,pandas可以与张量兼容。
用pandas处理缺失的数据时,我们可根据情况选择用插值法和删除法。

2.2.5 练习

直接粘贴的人家的代码

def drop_col():n = len(data)i = 0for col_name in ('NumRooms','Alley','Price'):cnt = data[col_name].count()if(n-cnt)>i:i = (n-cnt)j = col_namedata.drop(j,axis=1,inplace=True)drop_col()
data
#输出NumRooms   Price
0       NaN  127500
1       2.0  106000
2       4.0  178100
3       NaN  140000

2.3 线性代数

2022年4月29日09点15分耗时1hour

2.3.1. 标量

严格来说,我们称仅包含一个数值的叫标量(scalar)。
C=5/9*(F-32)。
这里边
C和F是变量(variable),
5、9、32是标量。

2.3.2. 向量

你可以将向量视为标量值组成的列表。 我们将这些标量值称为向量的元素(element)或分量(component)。
在数学表示法中,我们通常将向量记为粗体、小写的符号 (例如,x、y、z)。
我们通过一维张量处理向量。
注意:大量文献认为列向量是向量的默认方向,在本书中也是如此。

2.3.2.1. 长度、维度和形状

向量的长度通常称为向量的维度(dimension)。
与普通的Python数组一样,我们可以通过调用Python的内置len()函数来访问张量的长度。
当用张量表示一个向量(只有一个轴)时,我们也可以通过.shape属性访问向量的长度。 形状(shape)是一个元素组,列出了张量沿每个轴的长度(维数)。 对于只有一个轴的张量,形状只有一个元素。
请注意,维度(dimension)这个词在不同上下文时往往会有不同的含义,这经常会使人感到困惑。 为了清楚起见,我们在此明确一下: 向量或轴的维度被用来表示向量或轴的长度,即向量或轴的元素数量。 然而,张量的维度用来表示张量具有的轴数。 在这个意义上,张量的某个轴的维数就是这个轴的长度。

2.3.3. 矩阵

正如向量将标量从零阶推广到一阶,矩阵将向量从一阶推广到二阶。 矩阵,我们通常用粗体、大写字母来表示 (例如,X、Y、Z), 在代码中表示为具有两个轴的张量。
当矩阵具有相同数量的行和列时,其形状将变为正方形; 因此,它被称为方阵(square matrix)
当我们交换矩阵的行和列时,结果称为矩阵的转置(transpose)。
代码是:X.T
对称矩阵(symmetric matrix)等于其转置:

拓展:矩阵是有用的数据结构:它们允许我们组织具有不同模式的数据。 例如,我们矩阵中的行可能对应于不同的房屋(数据样本),而列可能对应于不同的属性。 如果你曾经使用过电子表格软件或已阅读过 2.2节,这应该听起来很熟悉。 因此,尽管单个向量的默认方向是列向量,但在表示表格数据集的矩阵中, 将每个数据样本作为矩阵中的行向量更为常见。 我们将在后面的章节中讲到这点,这种约定将支持常见的深度学习实践。 例如,沿着张量的最外轴,我们可以访问或遍历小批量的数据样本。

2.3.4. 张量

就像向量是标量的推广,矩阵是向量的推广一样,我们可以构建具有更多轴的数据结构。 张量(本小节中的“张量”指代数对象)为我们提供了描述具有任意数量轴的维数组的通用方法。 例如,向量是一阶张量,矩阵是二阶张量。 张量用特殊字体的大写字母表示(例如,X Y Z), 它们的索引机制和矩阵类似。

2.3.5. 张量算法的基本性质

具体而言,两个矩阵的按元素乘法称为Hadamard积(Hadamard product)(数学符号)一个圆圈里边一个点。
代码:A*B
将张量乘以或加上一个标量不会改变张量的形状,其中张量的每个元素都将与标量相加或相乘。

2.3.6. 降维

求和Σ
x.sum()
指定张量沿哪一个轴来通过求和降低维度
A54
A_sum_axis0 = A.sum(axis=0)
A04
A4
所有维度求和有两种表示方法
A.sum(axis=[0, 1]) # SameasA.sum()
求平均值
A.mean(), A.sum() / A.numel()
也可以指定维度
A.mean(axis=0), A.sum(axis=0) / A.shape[0]

2.3.6.1. 非降维求和

但是,有时在调用函数来计算总和或均值时保持轴数不变会很有用。
sum_A = A.sum(axis=1, keepdims=True)
后期可以通过广播恢复。
如果我们想沿某个轴计算A元素的累积总和, 比如axis=0(按行计算),我们可以调用cumsum函数。 此函数不会沿任何轴降低输入张量的维度
A.cumsum(axis=0)

A
tensor([[ 0.,  1.,  2.,  3.],[ 4.,  5.,  6.,  7.],[ 8.,  9., 10., 11.],[12., 13., 14., 15.],[16., 17., 18., 19.]])
A.cumsum(axis=0)
tensor([[ 0.,  1.,  2.,  3.],[ 4.,  6.,  8., 10.],[12., 15., 18., 21.],[24., 28., 32., 36.],[40., 45., 50., 55.]])

2.3.7. 点积(Dot Product)

点积(dot product)是相同位置的按元素乘积的和。
注意,我们可以通过执行按元素乘法,然后进行求和来表示两个向量的点积:

x,y,torch.dot(x,y)
(tensor([0., 1., 2., 3.]), tensor([1., 1., 1., 1.]), tensor(6.))
#same as
torch.sum(x*y)
tensor(6.)

2.3.8. 矩阵-向量积(matrix-vector product)

代码中使用张量表示矩阵-向量积,我们使用与点积相同的mv函数。 当我们为矩阵A和向量x调用torch.mv(A, x)时,会执行矩阵-向量积。 注意,A的列维数(沿轴1的长度)必须与x的维数(其长度)相同

A,x,torch.mv(A,x)
(tensor([[ 0.,  1.,  2.,  3.],[ 4.,  5.,  6.,  7.],[ 8.,  9., 10., 11.],[12., 13., 14., 15.],[16., 17., 18., 19.]]), tensor([0., 1., 2., 3.]), tensor([ 14.,  38.,  62.,  86., 110.]))

2.3.9. 矩阵-矩阵乘法(matrix-matrix multiplication)

矩阵-矩阵乘法可以简单地称为矩阵乘法,不应与”Hadamard积”混淆。

A,B,torch.mm(A,B)
(tensor([[ 0.,  1.,  2.,  3.],[ 4.,  5.,  6.,  7.],[ 8.,  9., 10., 11.],[12., 13., 14., 15.],[16., 17., 18., 19.]]), tensor([[1., 1., 1.],[1., 1., 1.],[1., 1., 1.],[1., 1., 1.]]), tensor([[ 6.,  6.,  6.],[22., 22., 22.],[38., 38., 38.],[54., 54., 54.],[70., 70., 70.]]))
A.shape,B.shape,torch.mm(A,B).shape
(torch.Size([5, 4]), torch.Size([4, 3]), torch.Size([5, 3]))

2.3.10. 范数

线性代数中最有用的一些运算符是范数(norm)。 非正式地说,一个向量的范数告诉我们一个向量有多大。 这里考虑的大小(size)概念不涉及维度,而是分量的大小

u = torch.tensor([3.0, -4.0])
torch.norm(u)
tensor(5.)

这个是L2范数,
L1范数是7
torch.abs(u).sum()
tensor(7.)

2.3.10.1. 范数和目标

在深度学习中,我们经常试图解决优化问题: 最大化分配给观测数据的概率; 最小化预测和真实观测之间的距离。 用向量表示物品(如单词、产品或新闻文章),以便最小化相似项目之间的距离,最大化不同项目之间的距离。 目标,或许是深度学习算法最重要的组成部分(除了数据),通常被表达为范数

2.3.12. 小结

标量、向量、矩阵和张量是线性代数中的基本数学对象。

向量泛化自标量,矩阵泛化自向量。

标量、向量、矩阵和张量分别具有零、一、二和任意数量的轴。

一个张量可以通过sum和mean沿指定的轴降低维度。

两个矩阵的按元素乘法被称为他们的Hadamard积。它与矩阵乘法不同。

在深度学习中,我们经常使用范数,如L1范数、L2范数和Frobenius范数。

我们可以对标量、向量、矩阵和张量执行各种操作

练习,没做

2.4 微积分

2022年4月30日14点24分耗时1hour左右
我们可以将拟合模型的任务分解为两个关键问题:
优化(optimization):用模型拟合观测数据的过程;
泛化(generalization):数学原理和实践者的智慧,能够指导我们生成出有效性超出用于训练的数据集本身的模型。

2.4.1. 导数和微分

认识一下符号:

由于这部分需要显示图像,但是我不用的pycharm搞,又从头开始了,先去安装官方的环境。

环境装了半小时还没完成,先看下边的了

2.4.2. 偏导数

2.4.3. 梯度

这块没看明白,当时学数学的时候就没怎么看动,只会背公式做题了,梯度的意义并没有搞懂,
借用百度的话说:
在向量微积分中,标量场的梯度是一个向量场。标量场中某一点上的梯度指向标量场增长最快的方向,梯度的长度是这个最大的变化率。更严格的说,从欧几里得空间Rn到R的函数的梯度是在Rn某一点最佳的线性近似。在这个意义上,梯度是雅可比矩阵的特殊情况。
我现在理解:反正就是下降最快的方向,再深入就先不管了。

2.4.4. 链式法则

2.4.5. 小结

~微分和积分是微积分的两个分支,前者可以应用于深度学习中的优化问题。
~导数可以被解释为函数相对于其变量的瞬时变化率,它也是函数曲线的切线的斜率。
~梯度是一个向量,其分量是多变量函数相对于其所有变量的偏导数。
~链式法则使我们能够微分复合函数。

2.4.6. 练习

没做

2.5. 自动微分 (automatic differentiation)

2022年4月30日16点21分耗时 30mins

深度学习框架通过自动计算导数,即自动微分(automatic differentiation)来加快求导。
实际中,根据我们设计的模型,系统会构建一个计算图(computational graph), 来跟踪计算是哪些数据通过哪些操作组合起来产生输出。 自动微分使系统能够随后反向传播梯度。 这里,反向传播(backpropagate)意味着跟踪整个计算图,填充关于每个参数的偏导数

2.5.1. 一个简单的例子

这个例子就是求y=2x*x的梯度,除了最后一块代码没看懂

x
tensor([0., 1., 2., 3.], requires_grad=True)
x.grad.zero_()
tensor([0., 0., 0., 0.])
y=x.sum()
y.backward()
x.grad
tensor([1., 1., 1., 1.])  #这里是表示的啥?

2.5.2. 非标量变量的反向传播

当y不是标量时,向量y关于向量x的导数的最自然解释是一个矩阵。 对于高阶和高维的y和x,求导的结果可以是一个高阶张量。
然而,虽然这些更奇特的对象确实出现在高级机器学习中(包括深度学习中), 但当我们调用向量的反向计算时,我们通常会试图计算一批训练样本中每个组成部分的损失函数的导数。 这里,我们的目的不是计算微分矩阵,而是单独计算批量中每个样本的偏导数之和。

这块也没看懂???

2.5.3. 分离计算

也没懂???
有时,我们希望将某些计算移动到记录的计算图之外。 例如,假设y是作为x的函数计算的,而z则是作为y和x的函数计算的。 想象一下,我们想计算z关于x的梯度,但由于某种原因,我们希望将y视为一个常数, 并且只考虑到x在y被计算后发挥的作用。

在这里,我们可以分离y来返回一个新变量u,该变量与y具有相同的值, 但丢弃计算图中如何计算y的任何信息。 换句话说,梯度不会向后流经u到x。 因此,下面的反向传播函数计算z=ux关于x的偏导数,同时将u作为常数处理, 而不是z=xx*x关于x的偏导数。

2.5.4. Python控制流的梯度计算

又是没看懂???
使用自动微分的一个好处是: 即使构建函数的计算图需要通过Python控制流(例如,条件、循环或任意函数调用),我们仍然可以计算得到的变量的梯度。

2.5.5. 小结

深度学习框架可以自动计算导数:我们首先将梯度附加到想要对其计算偏导数的变量上。然后我们记录目标值的计算,执行它的反向传播函数,并访问得到的梯度。

2.5.6. 练习 没做

2.6. 概率

2022年5月1日14点15分 耗时 1hours

2.6.1. 基本概率论

以掷色子为例讲了基本的概率知识

2.6.1.1. 概率论公理

2.6.1.2. 随机变量(random variable)

离散(discrete)随机变量(如骰子的每一面) 和连续(continuous)随机变量(如人的体重和身高)之间存在微妙的区别。

2.6.2. 处理多个随机变量

我们需要估计这些概率以及概率之间的关系,以便我们可以运用我们的推断来实现更好的医疗服务。
当我们处理多个随机变量时,会有若干个变量是我们感兴趣的。

2.6.2.1. 联合概率

2.6.2.2. 条件概率

2.6.2.3. 贝叶斯定理

2.6.2.4. 边际化

求和法则(sum rule)
边际化(marginalization)
边际化结果的概率或分布称为边际概率(marginal probability) 或边际分布(marginal distribution)

2.6.2.5. 独立性

依赖(dependence)与独立(independence)

2.6.2.6. 应用

我高中就对这种读不懂题的理论发怵。现在还是看不懂。我记得高考还是啥算了个撒谎仪测撒谎的概率,真操蛋啊。

2.6.3. 期望和方差 (Expectation and Variance)

期望 expectation
方差 variance
标准差(standared deviation)

2.6.4. 小结

我们可以从概率分布中采样。
我们可以使用联合分布、条件分布、Bayes定理、边缘化和独立性假设来分析多个随机变量。
期望和方差为概率分布的关键特征的概括提供了实用的度量形式。

2.6.5. 练习


第四题:如果做两遍第一个测试,无法保证独立性。

2.7. 查阅文档

2022年5月1日14点15分 耗时 10mins

2.7.1. 查找模块中的所有函数和类

import torch
print(dir(torch.distributions))

均匀分布(uniform)、正态分布(normal)和多项分布(multinomial)

2.7.2. 查找特定函数和类的用法

3. 线性神经网络

前边做笔记也没找到感觉,可能是为了做笔记而做笔记,后边打算先不做笔记了,等我的纸质书来了之后没事翻翻看看,直接用jupyter notebook 运行、修改、测试了

13.4.1. 生成多个锚框

这里刚开始没看懂,手动画了个图理解了一下。


设H和W相等,然后就理解anchor box 的样子了。一开始我只是没搞懂宽高比是个啥东西,现在懂了。

13 计算机视觉

前边的几个章节没看,直接看了看这一章,想到应该对我的目标检测有帮助。
这一章也是略看的,因为毕设时间紧迫,容不得我慢慢学习了。

小结

看完这本书,让我从整体架构上对网络的模型更了解了,学习的过程中手动的初始化weight、bais、修改网络模型层数,计算输入输出维度、高宽。总之是一本入门的好书。对我帮助很大。

简版:读、实践《动手学深度学习》相关推荐

  1. 中文教程!PyTorch版《动手学深度学习》开源了,最美DL书遇上最赞DL框架

    点击我爱计算机视觉标星,更快获取CVML新技术 本文经机器之心(微信公众号:almosthuman2014)授权转载,禁止二次转载 机器之心报道 项目作者:ShusenTang 参与:思 想要入门最前 ...

  2. 重磅!李沐「动手学深度学习」中文课程笔记来了!

    点击 机器学习算法与Python学习 ,选择加星标 精彩内容不迷路 机器之心报道 markdown笔记与原课程视频一一对应,Jupyter代码均有详细中文注释,这份学习笔记值得收藏. 亚马逊资深首席科 ...

  3. 李沐「动手学深度学习」中文课程笔记来了!代码还有详细中文注释

    关注公众号,发现CV技术之美 本文转自机器之心,编辑张倩. markdown笔记与原课程视频一一对应,Jupyter代码均有详细中文注释,这份学习笔记值得收藏. 去年年初,机器之心知识站上线了亚马逊资 ...

  4. 资源 | 李沐等人开源中文书《动手学深度学习》预览版上线

    来源:机器之心 本文约2000字,建议阅读10分钟. 本文为大家介绍了一本交互式深度学习书籍. 近日,由 Aston Zhang.李沐等人所著图书<动手学深度学习>放出了在线预览版,以供读 ...

  5. 364 页 PyTorch 版《动手学深度学习》分享(全中文,支持 Jupyter 运行)

    1 前言 最近有朋友留言要求分享一下李沐老师的<动手学深度学习>,小汤本着一直坚持的"好资源大家一起分享,共同学习,共同进步"的初衷,于是便去找了资料,而且还是中文版的 ...

  6. 【动手学深度学习PyTorch版】19 网络中的网络 NiN

    上一篇请移步[动手学深度学习PyTorch版]18 使用块的网络 VGG_水w的博客-CSDN博客 目录 一.网络中的网络 NiN 1.1 NiN ◼ 全连接层的问题 ◼ 大量的参数会带来很多问题 ◼ ...

  7. 【动手学深度学习PyTorch版】27 数据增强

    上一篇请移步[动手学深度学习PyTorch版]23 深度学习硬件CPU 和 GPU_水w的博客-CSDN博客 目录 一.数据增强 1.1 数据增强(主要是关于图像增强) ◼ CES上的真实的故事 ◼ ...

  8. 《动手学深度学习》参考答案(第二版)-第二章

      最近在学习<动手学深度学习>,结合百度和课后的大家的讨论(侵删),整理出这一份可能并不完全正确的参考答案(菜鸡的做题记录),因为个人水平有限,有错误的地方欢迎在 公众号 联系我,后面我 ...

  9. 【动手学深度学习PyTorch版】23 深度学习硬件CPU 和 GPU

    上一篇请移步[动手学深度学习PyTorch版]22续 ResNet为什么能训练出1000层的模型_水w的博客-CSDN博客 目录 一.深度学习硬件CPU 和 GPU 1.1 深度学习硬件 ◼ 计算机构 ...

  10. 《动手学深度学习》中文第二版预览版发布

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 作者丨李沐@知乎 来源丨https://zhuanlan.zhihu ...

最新文章

  1. etcd 笔记(08)— 基于 etcd 实现分布式锁
  2. 产品经理如何做好数据埋点
  3. SpringMVC + Hibernate-Validator 参数校验
  4. 微信界面代码android,仿微信界面代码安卓版
  5. 苹果发布第三财季财报 盘后股价上涨5%
  6. 虚拟主机传奇服务器,虚拟主机市场迅猛发展 演绎网络产品传奇
  7. Win7(64位)下安装Anaconda+Tensorflow(cpu)
  8. [caffe解读] caffe从数学公式到代码实现3-shape相关类
  9. jquery $(document).ready() 与window.onload的区别
  10. 检测工业级交换机性能好坏的8种方法
  11. jquery 点击事件
  12. Spring Boot中使用模板引擎引用资源
  13. 在html中代码规范是哪个键,HTML代码规范经验
  14. 子div用了float浮动之后,如何撑开父元素,让父元素div自动适应高度的问题
  15. 华为轮值董事长郭平:5“机”协同是基础电力,ICT行业应用将像家用电器和工业电气化
  16. Linux关机和重启命令
  17. 如何在不联网的情况下安装 Silverlight Tools
  18. 个人实践:总结方法论,提高做事效率
  19. 2/3维向量叉乘意义判断二维平面点的相对位置向量法证明海伦公式
  20. 正则表达式应用(日期正则表达式)

热门文章

  1. 我为OpenHarmony 写代码,战“码”先锋第二期正式开启!
  2. 【河南省第二届技能大赛-物联网技术】C模块Python开发讲解
  3. ESP32使用有源蜂鸣器演奏《反方向的钟》
  4. 几个好用又有趣的在线编程网站
  5. ISO14000系列标准特点(转载)
  6. 机器学习入门到进阶学习路线
  7. 教育叙事计算机学科,信息技术教师教育叙事
  8. 再创业之吴洪声:离开腾讯系之后
  9. DNSPod十问吴欣鸿:美图公司的To B“大航海时代”
  10. CFA一级学习笔记--数量(一)--货币的时间价值