Deep Learning with PyTorch

跨行小白,最近阅读了2019年12月Pytorch官网上深度学习的开源书《Deep Learning with PyTorch》,略作总结分享给大家,表述不当之处还请批评指正,感谢。

一、Pytorch简介
1.1 Pytorch的特点:灵活、基于python、张量。
1.2 Pytorch提供促进深度学习的库:
torch.nn(搭建神经网络)
torch.util.data(下载处理数据,又包括Dataset/DataLoader)
torch.nn.DataParallel and torch.distributed(CPU、GPU or 并机计算)
torch.optim(优化器)
torch.storage(张量存储)

二、张量
2.1 张量是PyTorch中最基本的数据结构。
2.2 张量存储与Python列表或元组的区别如下图:
Deep Learning with PyTorch_第1张图片
Python lists or tuples are individually allocated in memory,PyTorch tensors or NumPy arrays are views over contiguous memory.
2.3 张量的切片
(1)仍是一个张量
(2)未重新分配新的内存块储存切片结果,而是基于原储存结果的一个view。
2.4 张量的存储
在由torch.Storage实例化管理的连续内存块上,变量存储为包含连续内存块的一维数值型数组。见下图:
Deep Learning with PyTorch_第2张图片
但是,通过使用连续方法(points.is_contiguous())可以得到一个新的连续存储的张量,这个新的张量已经打乱了原张量元素的储存顺序,且按照新张量元素按行铺平存储在内存中。
2.5 尺寸(Size), 存储偏移(storage offset) 和 步长(strides)
尺寸(Size)是表示张量的每个维度上有多少个元素的元组;
存储器偏移量(storage offset)是存储器中与张量中的第一个元素相对应的索引;
步长(strides)是沿每个维度获得下一个元素所需要跳过存储中的元素数。如下图:
Deep Learning with PyTorch_第3张图片
2.6 检索张量
口诀:左包含,右不包含。
如some_list[1:4],返回some_list中的第一个至第三个元素(第四个元素不返回)。
2.7 张量与NumPy互相转换
张量可以与Numpy类型相互转换,需要注意的是将tensor转换成NumPy时,返回的Numpy共享原tensor底层缓冲区,因此改变Numpy会导致原始tensor的改变。

3 表格、序列、文本、图像数据的张量表示
(1)神经网络需要的数据类型是多维数值型张量,通常是32位浮点数。
(2)表格数据可以直接转换为张量数据。
(3)文本或分类数据可以通使用字典进行一键式编码,文本数据还可以使用词嵌入技术(从一键编码到词嵌入的过程,我的理解是降维)。
(4)图片数据可以有一个或多个通道,最常见的是红、绿、蓝三通道。

4 学习机制
4.1 几个基本概念:
学习率(learning_rate):用来衡量在梯度下降的方向上,参数每一次更新多少的值。
epoch:指完成对所有的训练样本参数更新的一次训练迭代过程。
4.2 一般步骤:
定义模型 ——> 初始化参数(requires_grad=True) ——> 调用模型 ——> 计算损失函数 ——> 调用backward()。见下图:
Deep Learning with PyTorch_第4张图片
(1)调用 backward()会使参数的梯度值在叶子节点积累,因此在每一次参数更新之后需要将梯度显示归零,即在requires_grad=True之前先optimizer.zero_grad()
(2)训练集、验证集与过拟合
4.3 凸优化机制适用于线性模型,但不能泛化至神经网络。本章学习机制的探究是基于线性模型进行的,该过程即参数估计。

5 用神经网络拟合数据
神经网络的训练看起来和参数估计有点像,但是它们的理论基础完全不同。
参数估计是假设模型属于参数未知的特定函数族(如未知w和b的线性模型),通过学习找到合适的w和b,即估计w和b的参数。而由线性行为和非线性行为组合构成的神经网络可以逼近任何非线性函数,即神经网络假设模型相当于是一个函数族(既有超参数又有参数,超参数确定特定模型类型,参数确定特定模型类型的具体参数)。(个人理解)

你可能感兴趣的:(深度学习,神经网络)