在前不久写过一篇《# 小白白也能看懂的 TensorFlow 及其在 AMI 的部署》,关于深度学习框架 TensorFlow 以及云部署。
本篇带来另一个著名的深度学习框架 —— PyTorch
冲~
TensorFlow vs PyTorch
从编程风格上来说,TensorFlow 有点像在写计划书:需要首先定义整个计算图(模型的结构和运算过程),然后再填充数据并执行。这样,虽然 TensorFlow 在某些情况下可以进行更多的优化,但也可能使代码看起来有些冗长。
而 PyTorch 更像是在进行对话,可以动态地构建、修改和执行计算图,这使得代码更易读、更接近 Python 编程的方式。
对于初学者来说,PyTorch 更容易上手,因为它的语法和编程风格更直观。TensorFlow 在 2.0 版本以后引入了 Eager Execution 模式,更接近 PyTorch,因此入门难度也相对降低。
社区生态方面,TensorFlow 有一个庞大的用户社区和丰富的生态系统,从部署到生产环境,适用于各种应用。而PyTorch 在科研领域更受欢迎;
对比表格如下:
特点 | TensorFlow | PyTorch |
---|---|---|
编程风格 | 静态计算图,较复杂。 | 动态计算图,直观易懂。 |
入门难度 | 初学者可能较难入门。 | 初学者友好,易于上手。 |
生态系统和支持 | 庞大的生态系统,广泛应用。 | 在研究中受欢迎,社区在增长。 |
部署和生产 | 丰富的部署工具,适用于生产环境。 | 提供部署选项,但 TensorFlow 更成熟。 |
计算图 | 静态计算图,有助于优化。 | 动态计算图,更灵活。 |
TensorFlow 有很多著名的应用,比如:Google的 BERT 模型就是使用 TensorFlow 开发的;还包括 ImageNet 图像分类、人脸识别、目标检测、图像分割等视觉类应用,以及语音识别、强化学习 AlphaGo 方面等;PyTorch 以其直观的动态计算图和易用性为标识,在学术界非常受欢迎。
TensorFlow 由 Google 开发,PyTorch 由 Facebook 开发。
上手 PyTorch
首先,安装 PyTorch:可以在 PyTorch 官方网站上找到适用于不同操作系统的安装指南。通常,可以使用 pip 或conda 来安装 PyTorch。
使用pip安装PyTorch:
-
打开终端(命令提示符)。
-
使用以下命令安装PyTorch。根据您的需求和系统选择适当的安装选项:
-
使用 CPU 版本的 PyTorch(没有 GPU 支持):
pip install torch
-
使用 GPU 版本的 PyTorch(需要具备支持 CUDA 的 GPU):
pip install torch==1.0.0 torchvision==0.2.1
可以根据需求调整版本号;
使用conda安装PyTorch:
- 如果使用 conda 进行环境管理,首先创建一个新的 conda 环境(可选建议):
conda create -n myenv python=3.8
conda activate myenv
- 然后使用 conda 安装PyTorch,选择适合系统的命令。例如,安装 CPU 版本的 PyTorch:
conda install pytorch torchvision cpuonly -c pytorch
安装 GPU 版本,执行以下命令:
rCopy code
conda install pytorch torchvision cudatoolkit=11.1 -c pytorch
安装完成后,可以在 Python 环境中导入 PyTorch 并开始使用它。
import torch
# 创建一个空的张量
x = torch.Tensor()
# 创建一个包含特定数据的张量
y = torch.tensor([1, 2, 3])
# 张量操作
a = torch.tensor([1, 2, 3])
b = torch.tensor([4, 5, 6])
c = a + b # 加法操作
d = a * 2 # 乘法操作
e = a[1] # 索引操作
PyTorch 内置了自动求导功能,允许构建和训练深度学习模型;使用 requires_grad=True 来启用梯度跟踪:
x = torch.tensor([1.0, 2.0, 3.0], requires_grad=True)
y = x**2
z = y.sum()
z.backward() # 计算梯度
print(x.grad) # 访问梯度
构建神经网络:
使用 torch.nn
模块构建:定义模型类,定义前向传播方法,并使用层来构建网络。例如,创建一个简单的全连接神经网络:
import torch.nn as nn
class SimpleNN(nn.Module):
def __init__(self):
super(SimpleNN, self).__init()
self.fc1 = nn.Linear(64, 128)
self.relu = nn.ReLU()
self.fc2 = nn.Linear(128, 10)
def forward(self, x):
x = self.fc1(x)
x = self.relu(x)
x = self.fc2(x)
return x
还可使用 PyTorch 优化器(如torch.optim
)和损失函数来训练模型。
定义数据加载器和训练循环,将输入数据传递给模型并计算损失;然后,通过反向传播更新模型的权重;这是深度学习项目的核心部分~
小结
PyTorch 是一个实践驱动的框架,通过亲自编写和运行代码来学习将更加有效;除了框架学习,加强了解深度学习的基本原理、梯度下降、反向传播等知识,也能助于 PyTorch 的操控。后面有机会再展开介绍~Σ(⊙▽⊙”a