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

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

本章代码:

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

Hook 函数概念

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

PyTorch 提供了 4 种 Hook 函数。

阅读更多
论文/Graph-Based Object Classification for Neuromorphic Vision Sensing 论文解读

论文/Graph-Based Object Classification for Neuromorphic Vision Sensing 论文解读

Title

Graph-Based Object Classification for Neuromorphic Vision Sensing

Summary

NVS 可以显著提高采样率,同时显著提高能量效率和对光照变化的鲁棒性。然而 NVS 不使用帧表示图像,所以不能利用最先进的循环神经网络(CNNs)。我们提出了一个基于 NVS 的紧凑的图表示,并使用结合残差网络来做分类,这种残差 Graph CNN 保持了尖峰事件的时空一致性,同时需要较少的计算和存储。 现在所有的图像识别的数据都是来源于 CMOS APS。然而 APS 的传感对于机器学习系统来说是很麻烦的,因为它的帧速率有限,帧间冗余度高,在变化的光照下快门调整缓慢而模糊,并且需要高功率。

阅读更多
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 卷积

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

一维卷积


阅读更多
PyTorch/[PyTorch 学习笔记] 3.1 模型创建步骤与 nn.Module
PyTorch/[PyTorch 学习笔记] 2.3 二十二种 transforms 图片数据预处理方法