Pytorch: 入门指南和 PyTorch 的 GPU版本安装(非常详细)
Copyright: Jingmin Wei, Pattern Recognition and Intelligent System, School of Artificial and Intelligence, Huazhong University of Science and Technology
Pytorch教程专栏目录链接
文章目录
本教程不商用,仅供学习和参考交流使用,如需转载,请联系本人。
教程前言
本教程为 Pytorch 入门到精通教程。
概览
第一阶段: 我们将介绍一些基础知识,从最简单的张量操作开始,一步步深入:核心模块 torch.nn 与操作算子,数据预处理与数据加载器构建,损失函数,优化器,网络模型搭建,网络参数计算,深度神经网络搭建框架与搭建实例。
在这一部分,我们将学习到:
-
实现高维矩阵的计算,索引,变换,变量的自动微分。
-
卷积,池化,全连接,循环,BN,GN,Dropout 等核心网络层的算法原理和实现方式。ReLU 及其变种, Softplus, Softmax 等常用的 Activation Function。感受野和空洞卷积相关理论。
-
交叉熵,均方误差等损失函数,SGD, Adam 等常用的经典优化器。
-
不同的数据增强方式,文字和图像数据的预处理和可视化。学习处理 IRIS鸢尾花,波士顿房价,Fashion-MNIST,IMDB 等常用数据集。
-
学习如何计算网络的卷积,池化,全连接层的参数,根据要求计算并搭建不同的神经网络。
第二阶段: 我们将介绍全连接神经网络和任务实现:
学习多层感知机(全连接网络),实现基础的分类和回归任务。通过全连接神经网络实现垃圾邮件分类,波士顿房价预测。
第三阶段: 我们将学习不同的 CNN 的结构和原理。从这一部分开始,建议大家结合论文原文理解代码。这也是整个教程的核心部分。
-
学习卷积网络的基本构成,并搭建简单的网络实现 Fashion-MNIST 的识别。
-
利用爬虫爬取数据集,利用预训练的 VGG 网络在 ImageNet 上进行分类任务的分析。
-
微调预训练的网络实现猴子,猫狗分类等任务。
-
重难点:学习诸如 LeNet, AlexNet, NiN, VGG, GooLeNet, ResNet, DenseNet 的经典卷积网络模型。深入理解网络背后的结构,核心思想,优化理论,并用代码对论文中的网络结构进行复现。
第四阶段: 学习不同的循环神经网络,LSTM 和 GRU 。学习文本的预处理方法,并搭建不同的 RNN ,实现文本分类和情感预测等自然语言处理的常见任务。
第五阶段: 更加细化的学习一些经典算法和任务:
图像风格迁移,自编码器,图像语义分割,图卷积神经网络,图像目标检测与跟踪。
-
我们将用一些经典网络模型,比如说 VGG19 ,实现图像风格迁移,图像语义分割等任务,感受现在很多流行的图像软件中,核心的风格算法的魅力。
-
我们将用神经网络实现自编码器 Auto-encoder,实现基于神经网络的无监督学习(自监督学习),对数据降维分析,并对比它 PCA 主成分分析的效果。
-
我们将学习半监督实现的图卷积神经网络,实现论文的分类,并对比 LP 标签传播半监督学习算法的效果。
-
我们将学习 FCN, U-Net, SegNet 等经典的语义分割网络,并实现相关的图像语义分割任务。
-
我们也将学习目标检测中的基础知识: IoU, mAP, NMS, FPN, 样本不均衡问题…探索 RetinaNet, Faster R-CNN, SSD, YOLO 等目标检测网络框架的魅力。
第六阶段,还没想好。 虽然深度强化学习,对抗学习等自己也有相关笔记的教程参考,但是这部分是 tensorflow 写的,之后有时间再补上吧。然后一些其他的,比如说集成学习算法优化等等,也可以写在这一部分。一些轻量网络的实现也可以作为拓展写在这。还有不知道啥时候更新的对抗攻击,Transformer,Diffusion 啥的,这是后话了。
本教程不会详细地说明每一个使用方法的数学推导。 比如说,本教程不会着重告诉你,激活函数怎么来的?损失函数(比如说 Sigmoid, ReLU 等)的梯度怎么推导?随机梯度下降法是怎么一回事?遇到相关概念,不明确的请自行查阅相关资料。
本教程侧重点为:通过实战,解决不同的分类回归问题;如何计算网络参数,搭建不同的网络模型;一些经典的神经网络模型和算法的代码实现;模型可视化,网络特征提取和可视化,结果可视化;模型的精度与损失的分析;一些经典的深度学习任务实现:高维数据回归预测,图像识别,文字分类,情感分析,风格迁移,语义分割,目标检测,对抗学习,自编码降维,图卷积半监督学习等等。
基础知识要求
如果没有以下某些基础的也不必担心,你可以直接看代码,在学代码写代码的同时,遇到相关问题,去搜索查阅相关即可。基础知识都不是太难理解,一旦入门,就足以攻克 PyTorch 所需要的数学知识部分。
本教程阅读前需要读者掌握一定的基础知识:
- 高等数学,线性代数,概率论等数学基础。 其中,矩阵的基本运算,函数求偏导,链式法则求梯度等相关数学知识是必要的。
- 对于机器学习(监督学习,无监督学习,半监督学习),深度学习有一定的基本概念认识。
- Python 语言基础。尤其是面向对象的基础,一定程度的 numpy, matplotlib, pandas 的数据处理和可视化基础。
- 机器学习基础。了解梯度下降法及其变种,了解损失函数(交叉熵,均方误差等)。接触过类似于感知器,线性回归,Logistic 回归,SVM 等机器学习的基础算法。
- 非必须:自己实现过,或者调用过 scikit-learn 实现一些分类或回归任务
- 非必须:一定的信号与系统基础知识。对于卷积,池化,归一化等操作有基本认识。
- 非必须:一定的图像知识基础,了解彩色图,灰度图,二值图,通道相关概念。了解一些常用的图像增强,图像变换的算法。一定的自然语言处理基础,了解 Word2Vec ,停顿词等相关概念。
Python 安装。非常非常不推荐廖老师的教程里的安装方式,如果你只安装一个 Python 解释器,那么你需要用很多次 pip 命令一个一个安装管理需要的库,而且解释器自带的 IDLE 写起代码来非常不方便。 我们一般使用的是 Anaconda3 科学计算环境 + VSCode / Pycharm IDE 。Anaconda内置了很多常用库和 Jupyter Notebook ,而现代的 IDE 会让代码的书写更加的方便和漂亮。
Jupyter Notebook 是一个交互式的 python 编程环境,文件后缀为.ipynb。它支持 cell 编程方式,支持 Markdown 语法,支持多种文件格式导出。非常适合用来保存网络的训练预测结果,边写代码边做笔记,和随时随地的 debug 。第一次用 cell 可能会不太习惯,一旦上手你会发现它非常非常好用。一般 Anaconda 安装后就有内置的 Jupyter,但是有环境目录的限制,所以可以通过 VSCode 和 Pycharm 里安装 Jupyter 插件来使用。
Python 基础。可以看廖老师的教程。一般三天内即可入门,学完面向对象编程那一章节即可。面向对象部分重点提一下,如果你有 C++/JAVA 等面向对象语言基础,那么 Python 的面向对象其实也就是举一反三的事。如果你没有的话,一定要去学习一下,因为我们的网络搭建多数采用的是类继承 torch.nn.Module 的方法,数据集构建也是采用的类继承 torch.utils.data.Data 的方法。
数据处理和可视化基础。推荐北理的慕课。很多 Python 的科学计算和机器学习库是边用边学的,掌握基本的原理后,其他的方法只需在使用的时候查阅资料,了解相关参数和使用方式即可。但是有几个库推荐大家一定要系统学习一下:numpy, matplotlib, pandas, re。 这几个库上手难度因人而异。如果你在 C/C++/JAVA 等语言中,系统学习过数组,那么numpy 你可以轻松掌握;如果你有 matlab 的绘图经验,那么 matplotlib 你能轻松上手;如果你有 sql/excel 等数据管理经验,pa