Pytorch入门

PyTorch是一个开源的机器学习框架,用于构建深度学习模型。它由Facebook的人工智能研究小组开发,并在全球范围内得到广泛应用和支持。它提供了丰富的工具和库,用于构建、训练和部署深度神经网络模型。PyTorch采用动态计算图的设计,使得构建和调试模型变得直观而灵活。它的自动求导功能也使得实现反向传播算法变得简单,是训练深度学习模型的关键组件。接下来,让我们一起了解一下Pytorch的基础语法,为后续Pytorch实战打好基础,本节主要分为如下两个主要内容:


前言

PyTorch是一个用于构建深度学习模型的开源机器学习框架。它提供了动态计算图、张量操作、自动微分和预训练模型等功能。PyTorch具有灵活性和可扩展性,可以帮助研究人员和开发者轻松构建和训练深度学习模型。

一、张量的概念和表示

在PyTorch中,张量(tensor)是最基本的数据结构,它类似于多维数组。张量在深度学习中扮演着核心的角色,用于表示和处理数据以及进行数值计算。

1.张量的维度和形状

当谈到张量(Tensor)的维度和形状时,我们可以将其视为多维数组。在PyTorch中,张量是一种特殊的数据结构,可以包含不同维度和形状的数据。

  • 维度(Dimension):也称为轴(Axis),表示张量中数据的排列方式。维度用于标识张量中数据的组织方式,类似于数组中的索引。例如,一维张量具有单个维度,二维张量具有两个维度,三维张量具有三个维度,依此类推。

  • 形状(Shape):指示张量每个维度的大小。形状是一个元组,其中的每个元素表示张量在对应维度上的大小。例如,形状为(3, 4)的张量表示一个二维张量,其中第一个维度大小为3,第二个维度大小为4。

以下是一些常见的张量示例及其维度和形状:

  • 一维张量:

    • 维度:1
    • 形状:(5,),表示包含5个元素的一维张量
  • 二维张量:

    • 维度:2
    • 形状:(3, 4),表示一个3行4列的二维张量
  • 三维张量:

    • 维度:3
    • 形状:(2, 3, 4),表示一个2个矩阵,每个矩阵有3行4列的三维张量

在PyTorch中,可以使用.dim()方法查看张量的维度,使用.size()方法或 .shape 属性获取张量的形状。

例如,对于一个名为tensor的张量,你可以使用以下代码来获取其维度和形状:

print(tensor.dim())   # 打印张量的维度
print(tensor.size())  # 打印张量的形状
print(tensor.shape)   # 打印张量的形状

2.张量的GPU加速

当涉及到GPU加速时,PyTorch提供了对张量操作的内置支持。通过将张量数据放置在GPU上进行计算,可以充分利用GPU的并行处理能力来加速模型训练和推理过程。

以下是使用PyTorch进行GPU加速的一般步骤:

  1. 检查GPU可用性:首先,你需要检查系统中是否有可用的GPU。可以使用torch.cuda.is_available()方法来检查PyTorch是否可以使用GPU。

  2. 将张量移动到GPU:如果系统上有可用的GPU,则可以使用.to()方法将张量从CPU移动到GPU。例如,可以使用tensor.to('cuda')将名为tensor的张量移动到默认的CUDA设备上。

  3. 定义模型和操作:接下来,你需要定义你的模型和操作,以确保它们在GPU上执行。这包括定义网络结构、损失函数和优化器等。

  4. 在GPU上进行训练和推理:一旦将数据和模型都移动到GPU上,你可以像往常一样训练和推理。PyTorch会自动利用GPU来执行张量操作,无需额外的修改。

以下是一个简单的示例,展示如何使用GPU加速PyTorch中的张量操作:

import torch

# 检查GPU可用性
if torch.cuda.is_available():
    device = torch.device("cuda")  # 使用默认的CUDA设备
else:
    device = torch.device("cpu")

# 创建张量并将其移动到GPU
tensor = torch.Tensor([1, 2, 3])
tensor = tensor.to(device)

 在这个示例中,我们首先检查系统中是否有可用的GPU,并根据结果选择设备。然后,我们使用.to()方法将tensor移动到所选设备(在此示例中为默认的CUDA设备)。

3.将张量转移到CPU

要将张量从GPU移动到CPU上进行计算,可以使用.to()方法并指定目标设备为CPU。以下是一个示例代码:

import torch

# 创建一个张量并将其移动到GPU
tensor = torch.Tensor([1, 2, 3])
tensor = tensor.to('cuda')

# 将张量移动到CPU
tensor = tensor.to('cpu')

在这个示例中,我们首先创建了一个张量tensor,然后使用.to('cuda')方法将其移动到GPU上。接下来,我们使用.to('cpu')方法将张量从GPU移动到CPU上。

请注意,在执行.to()操作时,会返回一个新的张量,因此需要将其分配给一个新变量或将其覆盖在原始张量上。

通过将张量移动到CPU,你可以在CPU上执行进一步的计算、显示结果或与其他CPU上的对象交互。

二、创建张量

        在PyTorch中,张量(Tensor)是一种多维数组,类似于NumPy的ndarray对象。张量可以用来表示数据和进行各种数学运算。本节将介绍如何创建不同类型的张量。

1.创建空张量

        当你想要创建一个空张量(即没有初始化值的张量)时,可以使用PyTorch中的torch.empty()

数。下面是一个示例代码:

import torch

# 创建一个空的张量
empty_tensor = torch.empty(3, 4)

print(empty_tensor)

在这个示例中,我们使用torch.empty()函数创建了一个3行4列的空张量。该函数接受一个或多个维度作为参数,并返回相应形状的未初始化张量。

需要注意的是,torch.empty()函数返回的张量不会自动清零或初始化为特定的值,而只是分配了一块内存来存储数据。因此,其值可能是未知的或包含之前存储的数据。

2.创建随机张量

        当你想要创建一个包含随机值的张量时,可以使用PyTorch中的torch.rand()函数或torch.randn()函数。这些函数可以生成指定形状的张量,并填充随机生成的值。

下面是使用这两个函数创建随机张量的示例代码:

代码如下(示例):

import torch

# 创建一个形状为(3, 4)的0到1之间的随机张量
random_tensor = torch.rand(3, 4)

# 创建一个形状为(2, 3)的正态分布随机张量
normal_tensor = torch.randn(2, 3)

print(random_tensor)
print(normal_tensor)

在这个示例中,我们首先使用torch.rand()函数创建了一个形状为(3, 4)的随机张量,其中的值范围在0到1之间。然后,我们使用torch.randn()函数创建了一个形状为(2, 3)的正态分布随机张量。

这些函数的参数是张量的形状。它们会返回一个具有指定形状并填充有对应随机值的张量。

 3.创建全零张量

        当你想要创建一个全零的张量时,可以使用PyTorch中的torch.zeros()函数。这个函数可以生成指定形状的张量,并将所有元素初始化为零。

以下是使用torch.zeros()函数创建全零张量的示例代码:

import torch

# 创建一个形状为(3, 4)的全零张量
zeros_tensor = torch.zeros(3, 4)

print(zeros_tensor)

        在这个示例中,我们使用torch.zeros()函数创建了一个形状为(3, 4)的全零张量。该函数的参数是张量的形状,它会返回一个具有指定形状并填充有零值的张量。

需要注意的是,这些全零张量默认是浮点型(float32)。如果你想创建其他数据类型的全零张量,可以使用 dtype 参数指定数据类型,例如torch.zeros(3, 4, dtype=torch.int)将创建一个形状为(3, 4)且数据类型为整型的全零张量。

4.创建全1张量

        要创建一个全1的张量,你可以使用PyTorch中的torch.ones()函数。这个函数可以生成指定形状的张量,并将所有元素初始化为1。

以下是使用torch.ones()函数创建全1张量的示例代码:

import torch

# 创建一个形状为(3, 4)的全1张量
ones_tensor = torch.ones(3, 4)

print(ones_tensor)

在这个示例中,我们使用torch.ones()函数创建了一个形状为(3, 4)的全1张量。该函数的参数是张量的形状,它会返回一个具有指定形状并填充有1值的张量。

需要注意的是,默认情况下,这些全1张量的数据类型是浮点型(float32)。如果你想创建其他数据类型的全1张量,可以使用 dtype 参数指定数据类型,例如torch.ones(3, 4, dtype=torch.int)将创建一个形状为(3, 4)且数据类型为整型的全1张量。

5.从现有数据创建张量

要从现有的数据创建张量,你可以使用PyTorch中的torch.tensor()函数。这个函数可以接受Python列表、NumPy数组或其他可迭代对象作为输入,并将其转换为PyTorch张量。

以下是使用torch.tensor()函数创建张量的示例代码:

import torch
import numpy as np

# 从Python列表创建张量
list_data = [1, 2, 3, 4, 5]
tensor_from_list = torch.tensor(list_data)

# 从NumPy数组创建张量
numpy_data = np.array([1.0, 2.0, 3.0, 4.0, 5.0])
tensor_from_numpy = torch.tensor(numpy_data)

print(tensor_from_list)
print(tensor_from_numpy)

在这个示例中,我们首先使用torch.tensor()函数将一个Python列表list_data转换为张量tensor_from_list。然后,我们使用同样的方法将一个NumPy数组numpy_data转换为张量tensor_from_numpy

需要注意的是,torch.tensor()函数会根据输入数据的类型自动推断出生成的张量的数据类型。如果需要,你也可以通过设置dtype参数来显式指定所需的数据类型。

6.创建具有特定数据类型的张量

要创建具有特定数据类型的张量,可以使用PyTorch中的torch.tensor()函数,并通过设置dtype参数来指定所需的数据类型。

以下是使用torch.tensor()函数创建具有特定数据类型的张量的示例代码:

import torch

# 创建一个64位浮点型(float64)的张量
tensor_float = torch.tensor([1, 2, 3], dtype=torch.float64)

# 创建一个32位整型(int32)的张量
tensor_int = torch.tensor([1.0, 2.0, 3.0], dtype=torch.int32)

print(tensor_float)
print(tensor_int)

在这个示例中,我们首先使用torch.tensor()函数创建了一个包含整数的张量tensor_float,并将其数据类型设置为64位浮点型(float64)。然后,我们创建了一个包含浮点数的张量tensor_int,并将其数据类型设置为32位整型(int32)。

需要注意的是,dtype参数接受多种合法的值,如torch.float32torch.int64torch.bool等。你可以根据自己的需求选择适当的数据类型。

如果已经存在一个张量,你也可以使用.type()方法来改变它的数据类型。例如,可以使用tensor.type(torch.float64)将张量转换为64位浮点型。


总结

以上就是今天要讲的内容,本文仅仅简单介绍了张量的概念,以及创建不同类型的张量。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值