1.深度学习框架
深度学习框架是用于构建、训练和部署深度学习模型的软件工具。这些框架提供了抽象层,允许开发人员使用高级API来定义复杂的神经网络结构,而无需深入了解底层数学或编程细节。常用的一些的深度学习框架如下:
-
TensorFlow: 由Google开发,是目前最广泛使用的深度学习框架之一。它支持静态计算图,适用于大规模机器学习和深度学习应用。
-
PyTorch: 由Facebook的人工智能研究实验室(FAIR)开发,以动态计算图和易于使用的API著称。PyTorch在研究社区中特别受欢迎,因为它提供了灵活性和控制力。
-
Keras: 是一个高级神经网络API,可以作为TensorFlow的前端运行,也可以与Microsoft Cognitive Toolkit (CNTK) 或者Theano一起使用。Keras以用户友好和模块化为特点。
-
PaddlePaddle: 由百度开发,PaddlePaddle提供了丰富的API和预训练模型,尤其在中文自然语言处理方面有优势。
2.Pytorch介绍
PyTorch是一个非常受欢迎的开源机器学习库,主要用于深度学习应用。它是由Facebook的人工智能研究实验室(FAIR)开发的,并得到了广泛的社区支持。PyTorch的设计重点在于灵活性、效率和易用性。PyTorch允许使用Python编写自定义操作和模型,这使得它非常适合处理非标准问题,如自然语言处理和计算机视觉中的复杂数据结构。同时,由于其使用动态计算图,这使得模型可以更容易地调试和修改。此外,Pytorch海支持GPU加速,显著提升深度学习模型的训练和推理速度。当前,PyTorch已经形成一个活跃的社区,提供了许多开源项目和库,如PyTorch Lightning和FastAI,这些工具可以进一步简化模型的构建和训练过程。
3.虚拟环境创建
如果有GPU支持,如果显示有NVIDIA显卡,通过系统查看cuda版本,安装对应的NVIDIA显卡驱动,cuDNN,然后根据系统和CUDA版本选择合适的PyTorch版本进行安装。验证安装是否成功可以通过导入PyTorch模块并检查版本信息,以及确认CUDA是否可用。
3.1cuda版本查看
win+R命令行,输入nvcc --version
最下方显示当前安装的cuda版本为12.0,也就是说我们安装的Pytorch(GPU版本)支持的cuda版本必须在12.0版本以下。
3.2安装Anaconda并创建虚拟环境
官网下载安装好Anaconda后,管理员运行Anaconda prompt进入命令窗口
输入conda create -n 环境名称(如Pytorchpy39) python=版本号
此命令创建虚拟环境ytorchpy39
然后输入conda activate 环境名称
此命令激活虚拟环境,在此环境下使用pip安装Pytorch以及必要的Python库即可
3.3Pycharm加载虚拟环境
进入Pycharm,打开文件-设置-项目-Python解释器,选择添加解释器,选择conda环境
在anaconda的安装目录中的Scripts找到对应的conda.exe文件,加载环境,然后在下方选择自己创建好的虚拟环境即可。
4.Pytorch推理框架
PyTorch 提供了多种方式来优化模型推理,例如使用 TorchScript 或 ONNX 格式导出模型,以便在不同的硬件平台上运行,或使用 JIT(Just-In-Time)编译器来加速模型执行。
TorchScript:可以将 PyTorch 模型转换为 TorchScript,这是一个序列化的字节码格式,可以被 PyTorch C++ 运行时解析和执行,从而加速推理速度。
ONNX:可以将模型导出为 ONNX 格式,这样就可以在不支持 PyTorch 的设备上运行模型,例如在手机、边缘设备或使用其他框架的系统中。
5.张量与张量操作
张量是PyTorch中的基础数据结构,用于表示多维数组。张量可以是0维(标量)、1维(向量)、2维(矩阵)或更高维的数组。PyTorch提供了多种创建张量的方法,包括从现有数据(如列表或numpy数组)创建张量。张量的形状可以通过ndim属性查询,而张量的维度可以通过shape属性获取。张量还支持多种操作,如点乘、叉乘、矩阵乘法、维度变换、强制类型转换等。
5.1张量常用操作
import torch
# 创建一个3x3的全零张量
tensor = torch.zeros(3, 3)
# 创建一个从1到9的3x3张量
tensor = torch.tensor([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
# 张量的加法
result = tensor + tensor
# 张量的点积
result = torch.dot(tensor[0], tensor[1])
# 沿着第一维度求和
sum_tensor = torch.sum(tensor, dim=0)
# 转置张量
transposed_tensor = torch.t(tensor)
# 将张量转换为NumPy数组
numpy_array = tensor.numpy()
5.2张量索引和切片
import numpy as np
# 创建一个3D的NumPy数组
arr = np.array([[[1, 2, 3],
[4, 5, 6]],
[[7, 8, 9],
[10, 11, 12]]])
单个元素:arr[0, 1, 2]
将返回第0层,第1行,第2列的元素(6)
多个元素:arr[0, :, :]
将返回第一层的所有元素
切片选取:arr[0, :, 1:3]
将返回第一层所有行的第2和第3列
步长:arr[:, :, ::2]
将返回所有层和所有行的偶数列
5.3张量的形状变换
view():该方法将张量重塑为新的形状,但必须保证元素的总数保持不变。如果形状中有一个维度未知,可以使用 -1
作为占位符,PyTorch会自动推断出这个维度的大小
tensor = torch.randn(4, 3, 2)
reshaped_tensor = tensor.view(4, 6) # 原始张量形状为(4, 3, 2),共24个元素,重塑为(4, 6)
squeeze():
移除所有尺寸为1的维度
tensor = torch.randn(2, 1, 3, 1, 4)
squeezed_tensor = tensor.squeeze() # 结果张量形状为(2, 3, 4)
unsqueeze():
在给定的位置插入一个尺寸为1的新维度
tensor = torch.randn(2, 3, 4)
unsqueezed_tensor = tensor.unsqueeze(1) # 结果张量形状为(2, 1, 3, 4)
transpose():
交换两个维度的顺序
tensor = torch.randn(2, 3, 4)
transposed_tensor = tensor.transpose(0, 1) # 第0维和第1维互换位置