丝滑走进深度学习之 PyTorch

2023-10-16 15:59:16 浏览数 (1)

本篇带来另一个著名的深度学习框架 —— 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

  1. 打开终端(命令提示符)。
  2. 使用以下命令安装PyTorch。根据您的需求和系统选择适当的安装选项:

使用 CPU 版本的 PyTorch(没有 GPU 支持):

代码语言:javascript复制
pip install torch

使用 GPU 版本的 PyTorch(需要具备支持 CUDA 的 GPU):

代码语言:javascript复制
pip install torch==1.0.0 torchvision==0.2.1

可以根据需求调整版本号;

使用conda安装PyTorch

  1. 如果使用 conda 进行环境管理,首先创建一个新的 conda 环境(可选建议):
代码语言:javascript复制
conda create -n myenv python=3.8
conda activate myenv
  1. 然后使用 conda 安装PyTorch,选择适合系统的命令。例如,安装 CPU 版本的 PyTorch:
代码语言:javascript复制
conda install pytorch torchvision cpuonly -c pytorch

安装 GPU 版本,执行以下命令:

代码语言:javascript复制
rCopy code
conda install pytorch torchvision cudatoolkit=11.1 -c pytorch

安装完成后,可以在 Python 环境中导入 PyTorch 并开始使用它。

代码语言:javascript复制
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 来启用梯度跟踪:

代码语言:javascript复制
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 模块构建:定义模型类,定义前向传播方法,并使用层来构建网络。例如,创建一个简单的全连接神经网络:

图片来源

代码语言:javascript复制
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

0 人点赞