一. 基本介绍
Pytorch概念
-
PyTorch是一个开源机器学习和深度学习框架。PyTorch 允许您使用 Python 代码操作和处理数据并编写深度学习算法,能够在强大的GPU加速基础上实现张量和动态神经网络。
-
PyTorch是一个基于 Python 的科学计算包,使用 Tensor 作为其核心数据结构,类似于 Numpy 数组,不同的是,PyTorch 可以用GPU来处理数据,提供许多深度学习的算法。
-
PyTorch提供了完整的使用文档、循序渐进的用户指南,作者亲自维护PyTorch论坛,方便用户交流和解决问题。
-
Meta(前Facebook)人工智能研究院FAIR对PyTorch的推广提供了大力支持。作为当今排名前三的深度学习研究机构,FAIR的支持足以确保PyTorch获得持续开发、更新的保障,不至于像一些个人开发的框架那样昙花一现。如有需要,我们也可以使用Python软件包(如NumPy、SciPy和Cython)来扩展 PyTorch。
-
相对于TensorFlow,PyTorch的一大优点是它的图是动态的,而TensorFlow框架是静态图,不利于扩展。同时,PyTorch非常简洁,方便使用。
-
如果说TensorFlow的设计是“Make it complicated”,Keras的设计是“Make it complicated and hide it”,那么PyTorch的设计则真正做到了“Keep it simple,stupid”。
为什么使用Pytorch
-
机器学习研究人员喜欢使用 PyTorch。截至 2022 年 2 月,PyTorch 是 Papers With Code 上最常用的深度学习框架,该网站用于跟踪机器学习研究论文及其附带的代码存储库。
-
PyTorch 易于学习和使用,足够灵活,可以在各种应用中使用,高效,以便我们可以处理巨大的现实数据集,并且足够准确,即使在输入数据存在不确定性的情况下也能提供正确的结果。
-
许多深度学习的应用使用了PyTorch,比如:
文字生成图片的Stable Diffusion:
用于对象检测和语义分割的YOLOv5系列(现在已经更新到YOLOv10):
实时语音克隆Real-Time Voice Cloning
-
除上述通用领域的应用外,在一些专业领域的应用也在快速发展,比如医学领域,用PyTorch开发的开箱即用的解决方案nnU-Net:
-
在GIS领域,ESRI官方提供了许多解决方案和预训练模型,有提取建筑物轮廓的模型:
深度学习优缺点
与机器学习的差别
-
不需要人工特征工程
-
特征工程+分类/回归 使用一个网络来完成
优缺点
优点
-
精确度高,性能好,效果好
-
拟合任意非线性的关系
-
框架多,不需我们自己造轮子
缺点
-
黑箱,可解释性差
-
网络参数多,超参数多
-
需要大量的数据进行训练,训练时间长,对算力有较高要求
-
小数据集容易过拟合
二. 环境安装
PyTorch安装环境配置
直接安装-CPU
pip install torch==X.XXX
常用镜像源
-
清华源:Simple Index
-
豆瓣源:Simple Index
CUDA安装-GPU
使用CUDA安装前应确定电脑装有英伟达的显卡, 如果没有显卡, 可以使用直接安装得方法, 不适用GPU
新建沙箱
创建一个虚拟python环境:
conda create -n DL_Pytorch python=3.9 conda activate DL_Pytorch
查看虚拟环境列表:
conda info --envs conda info -e conda env list
激活虚拟环境
# conda旧版本:4.3及更早的版本 source activate DL_Pytorch # conda新版本:4.4及以后 conda activate DL_Pytorch
删除虚拟环境
conda remove -n DL_Pytorch --all
查看本机GPU
在CUDA Toolkit 安装前用以下命令查询机器上显卡最高支持的CUDA 版本:
终端输入:
# 查看GPU信息 nvidia-smi
安装或更新驱动
最好使得驱动支持cuda11.8以上版本, 如果电脑显卡信息显示支持得CUDA版本低于11.8, 建议更新到11.8及以上
官方驱动下载地址:下载 NVIDIA 官方驱动 | NVIDIA
安装cuda
如果没有安装cuda
或者需要升级,可以去官网下载: CUDA Toolkit Archive | NVIDIA Developer
安装CUDNN
NVIDIA CUDA深度神经网络库 (cuDNN) 是一个 GPU 加速的深度神经网络基元库,能够以高度优化的方式实现标准例程(如前向和反向卷积、池化层、归一化和激活层)。
全球的深度学习研究人员和框架开发者都依赖 cuDNN 来实现高性能 GPU 加速。借助 cuDNN,研究人员和开发者可以专注于训练神经网络及开发软件应用,而不必花时间进行低层级的 GPU 性能调整。cuDNN 可加速广泛应用的深度学习框架,包括 Caffe2、Keras、MATLAB、MxNet、PaddlePaddle、PyTorch和 TensorFlow。
下载地址:cuDNN Archive | NVIDIA Developer
-
下载并解压缩
-
将选中得文件复制到CUDA安装路径:
-
Windows:
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA
-
Linux:
/usr/local/cuda
-
安装Pytorch
(1)在线安装
打开pytorch安装指导网站,选择合适的系统平台,关键是在compute platform
选择一个不高于本机的CUDA Version
,复制命令安装。
(2)离线安装
-
离线包下载地址:download.pytorch.org/whl/torch_stable.html
-
安装方式
pip install torch-2.0.1+cu118-cp310-cp310-win_amd64.whl
校验安装
import torch # 打印出正在使用的PyTorch和CUDA版本。 print(torch.__version__) print(torch.version.cuda) # 测试GPU是否生效 print(torch.cuda.is_available())
torch-torchvision版本
pytorch与torch vision版本对应问题:
三. 基本使用
张量简介
张量,英文为Tensor,是机器学习的基本构建模块,是以数字方式表示数据的形式。
例如,图像可以表示为形状为 [3, 224, 224]
的张量,这意味着 [colour_channels, height, width]
,因为图像具有 3
颜色通道(红色、绿色、蓝色),高度为 224
像素,宽度为 224
像素。
在张量语言(用于描述张量的语言)中,张量将具有三个维度,一个维度表示 colour_channels
、 height
和 width
。
张量的创建
张量得基本创建
根据数据创建torch
# 1. 使用torch.tensor根据数据创建张量 # 1.1. 创建标量 data = torch.tensor(10) print(data) # 1.2. 创建numpy数组 data = np.random.randn(3, 4) data = torch.tensor(data) print(data) # 1.3. 创建张量 data = torch.tensor([[1, 2], [3, 4]]) print(data)
根据形状/数据创建Torch
# 2.使用torch.Tensor根据形状/数据创建张量 # 2.1. 创建两行三列张量, 默认dtype为float32 data = torch.Tensor(2, 3) print(data) # 2.2. 如果传递列表, 则创建包含指定元素的张量 data = torch.Tensor([10]) print(data) data = torch.Tensor([1, 4]) print(data)
指定类型张量
# 3. torch.IntTensor(), torch.FloatTensor(), torch.DoubleTensor()创建指定类型的张量 # 3.1. 创建2行3列, dtype 为 int32 的张量 data = torch.IntTensor(2, 3) print(data) # 3.2. 注意: 如果传递的元素类型不正确, 则会进行类型转换 data = torch.IntTensor([2.5, 3.3]) print(data) # 3.3. 其他的类型 data = torch.ShortTensor() # int16 print(data) data = torch.LongTensor() # int64 print(data) data = torch.FloatTensor() # float32 print(data) data = torch.DoubleTensor() # float64 print(data)