PyTorch/[PyTorch 学习笔记] 开篇词-PyTorch 学习笔记
PyTorch/图神经网络 PyTorch Geometric 入门教程

PyTorch/图神经网络 PyTorch Geometric 入门教程

简介

Graph Neural Networks 简称 GNN,称为图神经网络,是深度学习中近年来一个比较受关注的领域。近年来 GNN 在学术界受到的关注越来越多,与之相关的论文数量呈上升趋势,GNN 通过对信息的传递,转换和聚合实现特征的提取,类似于传统的 CNN,只是 CNN 只能处理规则的输入,如图片等输入的高、宽和通道数都是固定的,而 GNN 可以处理不规则的输入,如点云等。 可查看【GNN】万字长文带你入门 GCN

阅读更多
PyTorch/[PyTorch 学习笔记] PyTorch 常见报错信息
PyTorch/[PyTorch 学习笔记] 8.4 RNN 简介
PyTorch/[PyTorch 学习笔记] 8.3 GAN(生成对抗网络)简介

PyTorch/[PyTorch 学习笔记] 8.3 GAN(生成对抗网络)简介

本章代码:

这篇文章主要介绍了生成对抗网络(Generative Adversarial Network),简称 GAN。

GAN 可以看作是一种可以生成特定分布数据的模型。

下面的代码是使用 Generator 来生成人脸图像,Generator 已经训练好保存在 pkl 文件中,只需要加载参数即可。由于模型是在多 GPU 的机器上训练的,因此加载参数后需要使用remove_module()函数来修改state_dict中的key

阅读更多
PyTorch/[PyTorch 学习笔记] 8.2 目标检测简介

PyTorch/[PyTorch 学习笔记] 8.2 目标检测简介

本章代码:

这篇文章主要介绍了目标检测。

目标检测是判断目标在图像中的位置,有两个要素:

  • 分类:分类向量\(P_{0}, P_{1}, P_{2}...\),shape 为\([N, c+1]\)
  • 回归:回归边界框\([x_{1}, x_{2}, y_{1}, y_{2}]\),shape 为\([n, 4]\)

下面代码是加载预训练好的FasterRCNN_ResNet50_fpn,这个模型在是 COCO 模型上进行训练的,有 91 种类别。这里图片不再是BCHW的形状,而是一个list,每个元素是图片。输出也是一个 list,每个元素是一个 dict,每个 dict 包含三个元素:boxes、scores、labels,每个元素都是 list,因为一张图片中可能包含多个目标。接着是绘制框的代码,scores的的某个元素小于某个阈值,则不绘制这个框。

阅读更多
PyTorch/[PyTorch 学习笔记] 8.1 inferencce 与图像分类简述

PyTorch/[PyTorch 学习笔记] 8.1 inferencce 与图像分类简述

本章代码:https://github.com/zhangxiann/PyTorch_Practice/blob/master/lesson8/resnet_inference.py

这篇文章主要介绍了 图像分类的 inference。

以 ResNet18 为例。

首先加载训练好的模型参数:

1
2
3
4
5
6
7
8
9
resnet18 = models.resnet18()

# 修改全连接层的输出
num_ftrs = resnet18.fc.in_features
resnet18.fc = nn.Linear(num_ftrs, 2)

# 加载模型参数
checkpoint = torch.load(m_path)
resnet18.load_state_dict(checkpoint['model_state_dict'])
阅读更多
PyTorch/[PyTorch 学习笔记] 7.3 使用 GPU 训练模型

PyTorch/[PyTorch 学习笔记] 7.3 使用 GPU 训练模型

本章代码:

这篇文章主要介绍了 GPU 的使用。

在数据运算时,两个数据进行运算,那么它们必须同时存放在同一个设备,要么同时是 CPU,要么同时是 GPU。而且数据和模型都要在同一个设备上。数据和模型可以使用to()方法从一个设备转移到另一个设备。而数据的to()方法还可以转换数据类型。

  • 从 CPU 到 GPU

    1
    2
    3
    device = torch.device("cuda")
    tensor = tensor.to(device)
    module.to(device)
阅读更多
PyTorch/[PyTorch 学习笔记] 7.2 模型 Finetune

PyTorch/[PyTorch 学习笔记] 7.2 模型 Finetune

本章代码:https://github.com/zhangxiann/PyTorch_Practice/blob/master/lesson7/finetune_resnet18.py

这篇文章主要介绍了模型的 Finetune。

迁移学习:把在 source domain 任务上的学习到的模型应用到 target domain 的任务。

Finetune 就是一种迁移学习的方法。比如做人脸识别,可以把 ImageNet 看作 source domain,人脸数据集看作 target domain。通常来说 source domain 要比 target domain 大得多。可以利用 ImageNet 训练好的网络应用到人脸识别中。

对于一个模型,通常可以分为前面的 feature extractor (卷积层)和后面的 classifier,在 Finetune 时,通常不改变 feature extractor 的权值,也就是冻结卷积层;并且改变最后一个全连接层的输出来适应目标任务,训练后面 classifier 的权值,这就是 Finetune。

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

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

本章代码:

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

序列化于反序列化

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

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

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

阅读更多