PyTorch基础知识:点燃你的深度学习之旅 - 最先进的技术

108 阅读6分钟

欢迎来到PyTorch的世界,这是一个由Facebook人工智能研究实验室(FAIR)开发的开源机器学习库,已经迅速成为深度学习爱好者的首选工具。PyTorch提供了动态计算图、GPU加速和丰富的生态系统,使其成为研究人员和开发人员喜爱的框架。在这篇博文中,我们将探讨PyTorch的基础知识,它的重要性,并通过代码实例深入探讨几个基本概念。让我们一起开启你的深度学习之旅吧!

用于监督学习的计算图:

计算图是一个有向无环图(DAG),代表神经网络中执行的操作序列。在监督学习中,这些图有助于将数据和操作的流程可视化,使其更容易理解、优化和调试模型。PyTorch使用动态计算图,也就是说,图是在执行过程中即时构建的。这种灵活性使得在运行期间可以更容易地操纵图结构。

安装Pytorch:

安装PyTorch是非常简单的。根据你喜欢的软件包管理器和平台,你可以选择以下方法之一:

  1. 使用pip(Python软件包管理器):要使用pip安装PyTorch,请打开您的终端或命令提示符并执行以下命令:

对于仅有CPU的版本:

pip install torch torchvision -f https://download.pytorch.org/whl/cpu/torch_stable.html

对于GPU版本(支持CUDA):

pip install torch torchvision -f https://download.pytorch.org/whl/cu111/torch_stable.html

注意:用与你的设置相对应的正确的CUDA版本替换cu111 (例如:cu101,cu110 )。你可以通过访问PyTorch官方网站并选择你所需要的配置来找到合适的轮子。

使用conda(Anaconda或Miniconda软件包管理器):要使用conda安装PyTorch,请打开您的终端或命令提示符并执行以下命令:

对于仅有CPU的版本:

conda install pytorch torchvision -c pytorch

对于GPU版本(支持CUDA):

conda install pytorch torchvision torchaudio -c pytorch -c conda-forge

注意:GPU版本将根据您的系统配置,自动安装相应的支持CUDA的PyTorch版本。

如需了解基于您的操作系统和软件包管理器的更具体的安装说明,请访问PyTorch官方网站并选择您需要的配置。

请记住使用兼容版本的Python环境(建议使用Python 3.6或更新版本)。为你的项目创建一个单独的虚拟环境,以避免与其他软件包发生潜在的冲突,这总是一个好的做法。

在PyTorch框架中实现一个张量:

张量是多维数组,是PyTorch的基本构建模块。它们能够实现高效的数学运算,并为GPU计算进行了优化。要在PyTorch中创建一个张量,您可以使用以下代码片段:

import torch
# Create a 2x3 matrix filled with zeroszeros_tensor = torch.zeros(2, 3)print(zeros_tensor)

对比激活函数:

激活函数将非线性引入神经网络,使其能够学习复杂的模式。一些流行的激活函数是:

  • Sigmoid:torch.sigmoid(x)
  • ReLU(整顿线性单元):torch.relu(x)
  • Leaky ReLU:torch.nn.functional.leaky_relu(x, negative_slope=0.01)
  • Tanh(双曲切线):torch.tanh(x)

对比损失函数:

损失函数衡量的是训练期间预测输出和实际输出(地面实况)之间的差异。PyTorch中的一些常见损失函数是:

  • 平均平方误差(MSE)损失:torch.nn.MSELoss()
  • 交叉熵损失:torch.nn.CrossEntropyLoss()
  • 二进制交叉熵损失:torch.nn.BCELoss()
  • L1损失:torch.nn.L1Loss()

构建一个神经网络训练器:

实施步骤和库函数:要在PyTorch中建立一个神经网络训练器,请遵循以下步骤:

  • 用以下方法定义你的神经网络模型torch.nn.Module
  • 选择一个优化器(例如,torch.optim.SGD,torch.optim.Adam )。
  • 选择一个损失函数(例如,torch.nn.MSELoss,torch.nn.CrossEntropyLoss )。
  • 加载并预处理数据集
  • 使用前向和后向通道训练模型
  • 在验证或测试数据集上评估该模型

在PyTorch中用张量建立神经网络模型:

下面是一个使用PyTorch的简单前馈神经网络的例子:

pythonCopy code
import torchimport torch.nn as nnimport torch.optim as optimclass SimpleNet(nn.Module):    def __init__(self, input_size, hidden_size, output_size):        super(SimpleNet, self).__init__()        self.fc1 = nn.Linear(input_size, hidden_size)        self.relu1 = nn.ReLU()        self.fc2 = nn.Linear(hidden_size, output_size)    def forward(self, x):        x = self.fc1(x)        x = self.relu1(x)        x = self.fc2(x)        return xinput_size = 784hidden_size = 128output_size = 10learning_rate = 0.001num_epochs = 10model = SimpleNet(input_size, hidden_size, output_size)criterion = nn.CrossEntropyLoss()optimizer = optim.Adam(model.parameters(), lr=learning_rate)if torch.cuda.is_available():    device = torch.device("cuda")    print(f"Using GPU: {torch.cuda.get_device_name(0)}")else:    device = torch.device("cpu")    print("Using CPU")model.to(device)for epoch in range(num_epochs):        inputs, labels = inputs.to(device), labels.to(device)        outputs = model(inputs)    loss = criterion(outputs, labels)        optimizer.zero_grad()    loss.backward()    optimizer.step()    print(f"Epoch [{epoch+1}/{num_epochs}], Loss: {loss.item()}")

很抱歉,这是个碎片化的例子。下面是使用PyTorch创建、训练和评估一个简单的神经网络并在GPU上运行的完整代码片段:

pythonCopy code
import torchimport torch.nn as nnimport torch.optim as optim
# Define the neural network modelclass SimpleNet(nn.Module):    def __init__(self, input_size, hidden_size, output_size):        super(SimpleNet, self).__init__()        self.fc1 = nn.Linear(input_size, hidden_size)        self.relu1 = nn.ReLU()        self.fc2 = nn.Linear(hidden_size, output_size)

这段代码定义了一个简单的前馈神经网络,对其进行了指定次数的训练,并在GPU上运行(如果有)。请注意,数据集加载和预处理步骤以及评估步骤不包括在这个片段中。

用CUDA进行GPU加速:

CUDA(计算统一设备架构)是由英伟达公司开发的一个并行计算平台和编程模型。它使开发人员能够利用英伟达GPU的力量进行通用计算,大大加快了计算密集型任务的速度。

PyTorch利用CUDA在GPU设备上进行张量运算,使深度学习模型的计算速度加快,执行时间减少。PyTorch抽象化了许多与GPU编程相关的复杂性,使得在GPU上运行你的模型变得容易。

为了证明PyTorch是如何利用CUDA来加快计算速度的,让我们来比较矩阵乘法在CPU和GPU上的执行时间:

import torchimport time
# Create two random matrices of size 5000 x 5000matrix1 = torch.rand(5000, 5000)matrix2 = torch.rand(5000, 5000)

在这个例子中,我们首先创建两个大小为5000×5000的随机矩阵,并使用CPU执行矩阵乘法。然后我们检查是否有GPU,如果有,我们就把矩阵移到GPU上,执行同样的矩阵乘法操作。这两个操作的执行时间被测量并打印出来。

通常情况下,你会发现,与CPU的执行时间相比,GPU的执行时间要短得多,特别是对于像矩阵乘法这样的大规模计算。这种加速是由于GPU的大规模并行处理能力,它允许在大型张量上有效执行操作。

通过利用CUDA和GPU,PyTorch可以大大加快深度学习的工作负荷,减少训练和推理时间,并能进行更多的实验和更快的模型开发。

原文链接:medium.com/state-of-th…