PyTorch/[PyTorch 学习笔记] 7.1 模型保存与加载

PyTorch/[PyTorch 学习笔记] 7.1 模型保存与加载

本章代码:

这篇文章主要介绍了序列化与反序列化,以及 PyTorch 中的模型保存于加载的两种方式,模型的断点续训练。

序列化与反序列化

模型在内存中是以对象的逻辑结构保存的,但是在硬盘中是以二进制流的方式保存的。

  • 序列化是指将内存中的数据以二进制序列的方式保存到硬盘中。PyTorch 的模型保存就是序列化。

  • 反序列化是指将硬盘中的二进制序列加载到内存中,得到模型的对象。PyTorch 的模型加载就是反序列化。

阅读更多
PyTorch/[PyTorch 学习笔记] 6.2 Normalization

PyTorch/[PyTorch 学习笔记] 6.2 Normalization

本章代码:

这篇文章主要介绍了 Batch Normalization 的概念,以及 PyTorch 中的 1d/2d/3d Batch Normalization 实现。

Batch Normalization

称为批标准化。批是指一批数据,通常为 mini-batch;标准化是处理后的数据服从\(N(0,1)\)的正态分布。

批标准化的优点有如下:

  • 可以使用更大的学习率,加速模型收敛
  • 可以不用精心设计权值初始化
  • 可以不用 dropout 或者较小的 dropout
  • 可以不用 L2 或者较小的 weight decay
  • 可以不用 LRN (local response normalization)
阅读更多
PyTorch/[PyTorch 学习笔记] 6.1 weight decay 和 dropout

PyTorch/[PyTorch 学习笔记] 6.1 weight decay 和 dropout

本章代码:

这篇文章主要介绍了正则化与偏差-方差分解,以及 PyTorch 中的 L2 正则项--weight decay

Regularization

Regularization 中文是正则化,可以理解为一种减少方差的策略。

在机器学习中,误差可以分解为:偏差,方差与噪声之和。即误差=偏差+方差+噪声

偏差度量了学习算法的期望预测与真实结果的偏离程度,即刻画了学习算法本身的拟合能力。

方差度量了同样大小的训练集的变动所导致的学习性能的变化,即刻画了数据扰动所造成的影响。

噪声则表达了在当前任务上学习任何算法所能达到的期望泛化误差的下界。

阅读更多
PyTorch/[PyTorch 学习笔记] 5.2 Hook 函数与 CAM 算法

PyTorch/[PyTorch 学习笔记] 5.2 Hook 函数与 CAM 算法

本章代码:

这篇文章主要介绍了如何使用 Hook 函数提取网络中的特征图进行可视化,和 CAM(class activation map, 类激活图)

Hook 函数概念

Hook 函数是在不改变主体的情况下,实现额外功能。由于 PyTorch 是基于动态图实现的,因此在一次迭代运算结束后,一些中间变量如非叶子节点的梯度和特征图,会被释放掉。在这种情况下想要提取和记录这些中间变量,就需要使用 Hook 函数。

PyTorch 提供了 4 种 Hook 函数。

阅读更多
PyTorch/[PyTorch 学习笔记] 5.1 TensorBoard 介绍

PyTorch/[PyTorch 学习笔记] 5.1 TensorBoard 介绍

本章代码:

TensorBoard 是 TensorFlow 中强大的可视化工具,支持标量、文本、图像、音频、视频和 Embedding 等多种数据可视化。

在 PyTorch 中也可以使用 TensorBoard,具体是使用 TensorboardX 来调用 TensorBoard。除了安装 TensorboardX,还要安装 TensorFlow 和 TensorBoard,其中 TensorFlow 和 TensorBoard 需要一致。

阅读更多
PyTorch/[PyTorch 学习笔记] 4.3 优化器

PyTorch/[PyTorch 学习笔记] 4.3 优化器

本章代码:

这篇文章主要介绍了 PyTorch 中的优化器,包括 3 个部分:优化器的概念、optimizer 的属性、optimizer 的方法。

优化器的概念

PyTorch 中的优化器是用于管理并更新模型中可学习参数的值,使得模型输出更加接近真实标签。

optimizer 的属性

PyTorch 中提供了 Optimizer 类,定义如下:

阅读更多
PyTorch/[PyTorch 学习笔记] 4.2 损失函数

PyTorch/[PyTorch 学习笔记] 4.2 损失函数

本章代码:

这篇文章主要介绍了损失函数的概念,以及 PyTorch 中提供的常用损失函数。

损失函数

损失函数是衡量模型输出与真实标签之间的差异。我们还经常听到代价函数和目标函数,它们之间差异如下:

  • 损失函数(Loss Function)是计算一个样本的模型输出与真实标签的差异

    Loss \(=f\left(y^{\wedge}, y\right)\)

  • 代价函数(Cost Function)是计算整个样本集的模型输出与真实标签的差异,是所有样本损失函数的平均值

    \(\cos t=\frac{1}{N} \sum_{i}^{N} f\left(y_{i}^{\wedge}, y_{i}\right)\)

  • 目标函数(Objective Function)就是代价函数加上正则项

在 PyTorch 中的损失函数也是继承于nn.Module,所以损失函数也可以看作网络层。

阅读更多
PyTorch/[PyTorch 学习笔记] 4.1 权值初始化

PyTorch/[PyTorch 学习笔记] 4.1 权值初始化

本章代码:https://github.com/zhangxiann/PyTorch_Practice/blob/master/lesson4/grad_vanish_explod.py


在搭建好网络模型之后,一个重要的步骤就是对网络模型中的权值进行初始化。适当的权值初始化可以加快模型的收敛,而不恰当的权值初始化可能引发梯度消失或者梯度爆炸,最终导致模型无法收敛。下面分 3 部分介绍。第一部分介绍不恰当的权值初始化是如何引发梯度消失与梯度爆炸的,第二部分介绍常用的 Xavier 方法与 Kaiming 方法,第三部分介绍 PyTorch 中的 10 种初始化方法。

梯度消失与梯度爆炸

考虑一个 3 层的全连接网络。

\(H_{1}=X \times W_{1}\)\(H_{2}=H_{1} \times W_{2}\)\(Out=H_{2} \times W_{3}\)

阅读更多
PyTorch/[PyTorch 学习笔记] 3.3 池化层、线性层和激活函数层

PyTorch/[PyTorch 学习笔记] 3.3 池化层、线性层和激活函数层

本章代码:https://github.com/zhangxiann/PyTorch_Practice/blob/master/lesson3/nn_layers_others.py

这篇文章主要介绍了 PyTorch 中的池化层、线性层和激活函数层。

池化层

池化的作用则体现在降采样:保留显著特征、降低特征维度,增大kernel的感受野。 另外一点值得注意:pooling也可以提供一些旋转不变性。 池化层可对提取到的特征信息进行降维,一方面使特征图变小,简化网络计算复杂度并在一定程度上避免过拟合的出现;一方面进行特征压缩,提取主要特征。

有最大池化和平均池化两张方式。

阅读更多
PyTorch/[PyTorch 学习笔记] 3.2 卷积层

PyTorch/[PyTorch 学习笔记] 3.2 卷积层

本章代码:https://github.com/zhangxiann/PyTorch_Practice/blob/master/lesson3/nn_layers_convolution.py

这篇文章主要介绍了 PyTorch 中常用的卷积层,包括 3 个部分。

1D/2D/3D 卷积

卷积有一维卷积、二维卷积、三维卷积。一般情况下,卷积核在几个维度上滑动,就是几维卷积。比如在图片上的卷积就是二维卷积。

一维卷积


阅读更多