本帖最后由 ljg2np 于 2024-12-25 12:55 编辑
本文分享对书中PyTorch开发基础(第3章)内容的阅读理解,介绍了PyTorch构建单层感知机和神经网络的应用实现。
一、引言
深度学习框架是为了方便开发者进行深度学习研究和开发的工具,对框架的选择一般取决于应用需求和开发者的喜好。
PyTorch是由Meta的人工智能研究团队开发的开源深度学习框架,基于Torch并采用Python语言开发,因其动态计算图的特性,成为TensorFlow的最大竞争对手。
二、安装
PyTorch运行环境支持Linux和Windows操作系统。
1、CUDA安装
书中介绍了在Linux Ubuntu22.04 x86_64系统的安装流程:
下载更新完毕,然后执行下面指令:
sudo apt-get -y install cuda
sudo reboot
用nvidia-smi可以查看GPU信息。
对于Windows系统,书中未提,实际上十分简单,访问英伟达官方网站,下载exe文件并安装即可。
2、PyTorch安装
输入下面的指令进行安装(可以参考采用国内高速镜像网站的安装方法):
pip install torch torchvision torchaudio
安装依赖库:
pip install -r requirements.txt
其中,requirements.txt内容如下:
datasets>=2.8.0
peft>=0.4.0.dev0
transformers>=4.30.1
accelerate>=0.20.3
bitsandbytes>=0.39.0
wandb>=0.14.2
3、安装后的几个检查点
检查PyTorch版本:
torch.__version__
判断CUDA支持:
torch.cuda.is_available()
检查CUDA版本:
torch.version.cuda
基于以上操作,就完成了PyTorch的安装内容。
三、特点
1、支持GPU
PyTorch可以在CPU上运行,也支持GPU操作。
Tensors可以通过.to方法转换到CPU或GPU上。如:
device=torch.device("cuda:0")
x=torch.tensor([1,2,3]).to(device)
y=x*x
print(y.to("cpu",torch.double))
2、动态计算图
与TensorFlow的静态计算图不同,PyTorch使用动态计算图。
PyTorch提供自动梯度计算机制,Autograd库属于define-by-run类型框架,具有自动微分功能,将Tensor的属性.requires_grad设为True,在调用backward()时,梯度会被自动计算。如:
x=torch.([[1.,2.],[3.,4.]],requires_grad=True)
y=x**2
y.backward()
可以使用torch.no_grad()阻止Autograd追踪。
torch.zero_grad(),用于清零梯度。
3、张量
PyTorch张量是PyTorch中最重要的数据结构,相当于NumPy的多维数组,都是单一数据类型多维矩阵。
PyTorch张量对象可以共享内存,具有联动操作特性。
借助于time函数,可以比较PyTorch与Numpy在处理张量运算时的效率,可以看到PyTorch在底层做了很多优化工作。
4、类与模块(神经网络)
torch.nn模块是构建神经网络的主要工具,包括:预定义层、损失函数、顺序层模型(nn.Sequential)、正则归一化层、激活函数等。
torch.linear线性模块是神经网络模块库(torch.nn)中的一个类,用于全连接层或线性层的构建。
torch.optim模块在PyTorch库中用于实现各种优化算法,有SGD优化器、Adam优化器、学习率调度器等。
5、其它模块
书中还介绍了几个PyTorch使用中较常用的模块和类库,如nn.Parameter类、typing模块、logging模块、dataclasses模块和Fire库。
四、应用
书中对PyTorch中的常用类和模块做了简单介绍之后,基于PyTorch实现神经网络的构建分三个步骤循序渐进的进行了讲解,下面是代码:
1、单层感知机实现
在实现过程中,从nn.Module继承定义类Perceptron,使用PyTorch的tensor张量替代NumPy的数组,使用了nn模块的已有函数,见图中蓝框标注。
2、基于函数的神经网络实现
书中给出了实现简单神经网络的代码,通过使用PyTorch函数定义PyTorchNeuralNetwork类,见图中蓝框标注部分。
3、基于torch.nn模块构建神经网络
书中给出了例子代码,从torch.nn.Module继承并定义类,类中函数使用了nn模块函数,见图中蓝色方框标注部分。
五、小结
通过本章的学习,掌握了新工具并加深了构建神经网络的学习;与之前Numpy构建神经网络相比较,PyTorch更加有条理和便捷;通过对GPU的支持,能够高效的进行神经网络的构建,为之后深度学习的开展提供了便利的工具。
推荐阅读和参考资料:
1、TensorFlow
2、PyTorch社区