一、pytorch 简介
Pytorch是torch的python版本,是由Facebook开源的神经网络框架,专门针对 GPU 加速的深度神经网络(DNN)编程。Torch 是一个经典的对多维矩阵数据进行操作的张量(tensor )库,在机器学习和其他数学密集型应用有广泛应用。与Tensorflow的静态计算图不同,pytorch的计算图是动态的,可以根据计算需要实时改变计算图。但由于Torch语言采用 Lua,导致在国内一直很小众,并逐渐被支持 Python 的 Tensorflow 抢走用户。作为经典机器学习库 Torch 的端口,PyTorch 为 Python 语言使用者提供了舒适的写代码选择。
二、pytorch 优势
- 1.简洁:
PyTorch的设计追求最少的封装,尽量避免重复造轮子。不像 TensorFlow 中充斥着session、graph、operation、name_scope、variable、tensor、layer等全新的概念,PyTorch 的设计遵循tensor→variable(autograd)→nn.Module 三个由低到高的抽象层次,分别代表高维数组(张量)、自动求导(变量)和神经网络(层/模块),而且这三个抽象之间联系紧密,可以同时进行修改和操作。 - 2.速度:
PyTorch 的灵活性不以速度为代价,在许多评测中,PyTorch 的速度表现胜过 TensorFlow和Keras 等框架。 - 3.易用:
PyTorch 是所有的框架中面向对象设计的最优雅的一个。PyTorch的面向对象的接口设计来源于Torch,而Torch的接口设计以灵活易用而著称,Keras作者最初就是受Torch的启发才开发了Keras。 - 4.活跃的社区:
PyTorch 提供了完整的文档,循序渐进的指南,作者亲自维护的论坛,供用户交流和求教问题。Facebook 人工智能研究院对 PyTorch 提供了强力支持。
三、pytorch 常用工具包
- torch :类似 NumPy 的张量库,强 GPU 支持 ;
- torch.autograd :基于 tape 的自动区别库,支持 torch 之中的所有可区分张量运行;
- torch.nn :为最大化灵活性未涉及、与 autograd 深度整合的神经网络库;
- torch.optim:与 torch.nn 一起使用的优化包,包含 SGD、RMSProp、LBFGS、Adam 等标准优化方式;
- torch.multiprocessing: python 多进程并发,进程之间 torch Tensors 的内存共享;
- torch.utils:数据载入器。具有训练器和其他便利功能;
- torch.legacy(.nn/.optim) :处于向后兼容性考虑,从 Torch 移植来的 legacy 代码;
四、pytorch 工具箱
日常在进行PyTorch模型训练的时候,如果想知道模型的好坏,我们会用明显的方式去评估。例如:train/val loss、train/val precision、Confusion Matrix、per class precision、F1 Score、t- SNE视觉化、GradCAM、观看模型分类时,判断错误的图片,及其原始图片路径。
然而,目前大多数研究公开的代码都已公开,几乎找不到一个将整个评估方法整合在一起的方案。因此,如果我们想要获得这些信息,就必须到Google搜索,找别人是怎么回事这些完成功能的,往往花上很长时间。
在本文中,我将汇整过去写过关于这些主题的文章及程序代码,制作成一个目录,供读者及自己查询使用:
1.使用TensorBoard视觉化train/val损失、train/val精度
torch.utils.tensorboard — PyTorch 2.2 documentation
2. 混淆矩阵和每类精度
如何根据PyTorch的模型预测输出的稀疏矩阵(Confusion Matrix)并取得每类的精度?
3. F1 Score(不平衡数据集可用宏观和加权)
sklearn官方F1 Score文档
4. t-SNE园林化
如何使用PyTorch的特征提取器输出进行t-SNE园林化?
5. GradCAM
如何在PyTorch上使用GradCAM进行神经网路分类参考视觉化?
6.观看模型预测时,判断错误的图片
此功能将预测错误的图片保存到TensorBoard的日志中,再使用Tensorflow==1.13.1版本还原出来到数据夹中,有两篇文章需要参考。
如何显示PyTorch中预测错误的图片?
如何将抓取的图片保存到TensorBoard?
7.检查模型的参数量及模型文件大小
PyTorch如何检查模型的参数量及模型文件大小?
8.排序错误之原始图片路径?
PyTorch如何排序错误之原始图片路径?
9.让训练结果具有再现性( Reproducibility )
如何确保PyTorch训练的结果具有再现性?
10.将模型的多个标签输出改成只有2种输出
如何修改PyTorch的预测结果?
11.快速使用一些基于PyTorch所开发的套件
基于PyTorch的实用库
12.减少训练模型所需的时间
如何缩减PyTorch训练时所需的时间?
13.计算数据集的均值和标准差,用作标准化的参数
PyTorch计算数据集的均值和标准差
14.计算Overkill和Leakage
PyTorch如何计算Overkill和Leakage输出并生成Excel文件?
15.在训练过程中,使用自定义的数据增强方法
如何在PyTorch的transforms.Compose中使用自定义的数据增强?
16.训练过程中,让各个类别的训练样本数量平均被抽取,
如何在PyTorch时的每个Batch中使各个类别拥有数量相同的样本?
17.搭配TensorBoard进行2D或3D的T-SNE视觉化
如何使用TensorBoard针对PyTorch的嵌入输出进行2D或3D的T-SNE视觉化?
18.进行迁移学习
PyTorch如何进行迁移学习
19.使用PyTorch实作ResNet提取神经网路指定层输出之特征并提取指定层输出之特征
20.提取图像数据集特征并保存成单独的Pickle文件
如何将PyTorch图像数据集提取出Tensor特征并保存成Pickle文件?
21.使用贝叶斯优化自动化调整神经网络路超参数
如何使用贝叶斯优化自动化调整机器学习模型的超参数?