丝滑走进深度学习之 PyTorch

在前不久写过一篇《# 小白白也能看懂的 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

  1. 打开终端(命令提示符)。

  2. 使用以下命令安装PyTorch。根据您的需求和系统选择适当的安装选项:

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

    复制代码
    pip install torch
  • 使用 GPU 版本的 PyTorch(需要具备支持 CUDA 的 GPU):

    ini 复制代码
    pip install torch==1.0.0 torchvision==0.2.1

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

使用conda安装PyTorch

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

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

ini 复制代码
rCopy code
conda install pytorch torchvision cudatoolkit=11.1 -c pytorch

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

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

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

图片来源

python 复制代码
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

相关推荐
腾讯TNTWeb前端团队7 小时前
helux v5 发布了,像pinia一样优雅地管理你的react状态吧
前端·javascript·react.js
uhakadotcom10 小时前
视频直播与视频点播:基础知识与应用场景
后端·面试·架构
范文杰10 小时前
AI 时代如何更高效开发前端组件?21st.dev 给了一种答案
前端·ai编程
拉不动的猪10 小时前
刷刷题50(常见的js数据通信与渲染问题)
前端·javascript·面试
拉不动的猪10 小时前
JS多线程Webworks中的几种实战场景演示
前端·javascript·面试
FreeCultureBoy11 小时前
macOS 命令行 原生挂载 webdav 方法
前端
uhakadotcom12 小时前
快速开始使用 n8n
后端·面试·github
uhakadotcom12 小时前
Astro 框架:快速构建内容驱动型网站的利器
前端·javascript·面试
uhakadotcom12 小时前
了解Nest.js和Next.js:如何选择合适的框架
前端·javascript·面试
uhakadotcom12 小时前
React与Next.js:基础知识及应用场景
前端·面试·github