IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 简版:读、实践《动手学深度学习》 -> 正文阅读

[人工智能]简版:读、实践《动手学深度学习》

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

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 = 0
    for col_name in ('NumRooms','Alley','Price'):
        cnt = data[col_name].count()
        if(n-cnt)>i:
            i = (n-cnt)
            j = col_name
    data.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吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-04-30 08:42:53  更:2022-04-30 08:45:03 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 8:23:46-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码