pytorch学习day1

发布于:2024-05-30 ⋅ 阅读:(75) ⋅ 点赞:(0)

一.pytorch主要模块介绍

1.1 模块介绍

模块 描述
torch 包含激活函数和主要的张量操作
torch.Tensor 定义了张量的数据类型,方法可返回新张量,方法后缀带下划线可修改张量本身
torch.cuda 定义了 CUDA 运算相关的函数,如检查 CUDA 是否可用,清除缓存,设置 GPU 计算流等
torch.nn 神经网络模块化的核心,包括卷积神经网络和全连接层,以及一系列损失函数
torch.nn.functional 定义神经网络相关的函数,卷积函数、池化函数、log_softmax 等激活函数,torch.nn 模块调用 torch.nn.functional 的函数
torch.nn.init 权重初始化模块,均匀初始化和正态分布初始化,带下划线表示修改张量本身并返回
torch.optim 定义一系列优化器,如 SGD、Adam,以及学习率调度器,实现学习率衰减方法
torch.autograd 自动微分算法模块,反向传播和求导函数,设置不求导部分
torch.distributed 分布式计算模块,设定并行运算环境
torch.distributions 强化学习等需要的策略梯度法,处理离散采样结果无法求导的问题
torch.hub 提供预训练模型给用户使用,可以获取模型的 checkpoint,加载对应模型
torch.random 保存和设置随机数生成器,设置随机数种子,初始化种子,设置和获取当前随机数生成器状态
torch.jit 动态图转静态图,保存后被其他前端支持,关联 torch.onnx 进行深度学习模型交换
torch.utils.benchmark 记录模型中各模块运行时间,优化模型性能
torch.utils.checkpoint 优化模型性能,以计算时间换空间,记录中间数据计算过程
torch.utils.data 主要包含 Dataset 和 DataLoader,用于数据加载和预处理
torch.utils.tensorboard PyTorch 对 TensorBoard 的数据可视化支持工具,显示模型训练过程中的损失函数和张量权重的直方图,展示中间输出的文本、视频等内容

1.2 重要模块代码实现

1.2.1 Tensor

在深度学习和PyTorch中,张量(tensor)是一个多维数组,类似于实数、向量和矩阵的推广。张量可以是零维(标量)、一维(向量)、二维(矩阵)或更高维的数据容器。每个张量都有一个数据类型(如整数或浮点数)和形状(各维度的大小)。

在PyTorch中,张量由以下重要属性定义:

  1. 数据类型(Data Type):张量可以存储不同类型的数据,如整数、浮点数等。
  2. 形状(Shape):描述了张量的每个维度的大小。
  3. 维度(Dimension):张量的秩,即张量中包含的轴数。

torch.tensor 是 PyTorch 中创建张量的函数,返回一个新的张量对象。它具有多种属性,其

中一些重要的属性包括:

  1. device:表示张量所在的设备(如 CPU 或 GPU)。
  2. dtype:张量的数据类型,如 torch.float32、torch.int64 等。
  3. shape:张量的形状,描述了各个维度的大小。
  4. requires_grad:指示张量是否需要梯度,用于自动微分。
  5. grad:存储张量的梯度,用于反向传播。
  6. grad_fn:指向创建张量的函数(如加法操作)的反向传播函数。
  7. is_leaf:表示张量是否是叶张量,即未经过运算得到的张量。
  8. name:张量的名称,用于在 TensorBoard 等工具中进行标识和可视化。

这些属性使得张量可以有效地在深度学习中进行梯度计算、反向传播和参数更新。您可以使

用这些属性来检查和管理张量的状态和行为。

import torch

# 创建一个张量
x = torch.tensor([[1.0, 2.0, 3.0],
                  [4.0, 5.0, 6.0]])

# 访问张量的属性
print("Device:", x.device)  # 输出设备信息,通常是cpu
print("Data Type (dtype):", x.dtype)  # 输出数据类型
print("Shape:", x.shape)  # 输出张量的形状
print("Requires Gradient:", x.requires_grad)  # 输出是否需要计算梯度的信息,通常是False
print("Gradient (grad):", x.grad)  # 输出梯度信息
print("Gradient Function (grad_fn):", x.grad_fn)  # 输出梯度函数信息
print("Is Leaf:", x.is_leaf)  # 输出是否是叶节点的信息,通常是True
print("Name:", x.name)  # 输出张量的名称

1.2.2 Tensor的创建

在PyTorch中,有几种常见的方式可以用来创建张量,其中包括:

  1. 直接创建张量:使用torch.tensor函数可以直接从数据中创建张量。例如:

    import torch
    # 从列表创建张量
    a = torch.tensor([1, 2, 3])
    # 从numpy数组创建张量
    b = torch.tensor(np.array([4, 5, 6]))

  2. 使用特定函数创建:PyTorch提供了多种函数来创建特定类型的张量,如全零张量、全一张量等。例如:

    import torch
    # 创建全零张量
    zeros_tensor = torch.zeros(2, 3)
    # 创建全一张量
    ones_tensor = torch.ones(3, 4)

  3. 通过随机数创建:使用随机数函数可以创建具有随机值的张量。例如:

    import torch
    # 创建服从均匀分布的随机张量
    random_uniform = torch.rand(2, 2)
    # 创建服从标准正态分布的随机张量
    random_normal = torch.randn(3, 3)

  4. 从已有张量创建:可以通过现有张量的形状和数据类型创建新的张量。例如:

    import torch
    # 从现有张量创建张量
    x = torch.tensor([[1, 2], [3, 4]])
    new_tensor = torch.zeros_like(x)

1.2.3 Tensor的操作

在线性回归和其他深度学习任务中,张量操作是至关重要的。PyTorch提供了丰富的张量操作函数,使得数据处理和模型训练变得高效和灵活。下面介绍几种常见的张量操作:

  1. 张量创建:使用torch.tensor()函数或特定的张量创建函数(如torch.zeros()torch.ones())创建张量。

  2. 张量形状操作:可以通过tensor.size()tensor.view()等方法改变张量的形状。

  3. 张量运算:PyTorch支持常见的张量运算,如加法、减法、乘法、除法等,使用运算符或对应的函数实现。

  4. 索引和切片:类似于Python列表,可以通过索引和切片操作访问和修改张量的元素。

  5. 广播:PyTorch支持广播操作,自动将不同形状的张量进行适当的扩展以进行运算。

  6. 转置和重塑:通过tensor.t()进行张量转置,通过tensor.permute()进行轴变换,通过tensor.reshape()进行张量的重塑。

  7. 约简和聚合操作:可对张量进行约简操作,如求和、均值、最大值、最小值等,使用tensor.sum()tensor.mean()等。

  8. 逐元素操作:PyTorch支持逐元素的数学函数,如torch.exp()torch.log()torch.relu()等。

  9. 矩阵操作:可以通过torch.mm()进行矩阵乘法,通过torch.inverse()计算逆矩阵。

  10. 梯度计算:梯度计算是PyTorch的关键功能,张量操作会记录梯度信息,可通过tensor.backward()计算梯度。

这些张量操作函数使得在PyTorch中进行深度学习任务和模型构建更加方便和高效。通过灵活使用这些操作,可以实现各种复杂的深度学习任务。

import torch

# 创建张量
x = torch.tensor([[1, 2], [3, 4]])
y = torch.ones(2, 2)
print("Tensor x:")
print(x)
print("Tensor y:")
print(y)

# 张量形状操作
print("Shape of x:", x.size())

# 张量运算
z = x + y
print("Addition of x and y:")
print(z)

# 索引和切片
print("First row of x:")
print(x[0, :])

# 广播操作
a = torch.tensor([1, 2, 3])
b = torch.tensor([[4], [5], [6]])
c = a + b
print("Broadcasting result:")
print(c)

# 转置操作
x_transposed = x.t()
print("Transposed x:")
print(x_transposed)

# 逐元素操作
x_squared = x**2
print("Element-wise square of x:")
print(x_squared)

1.2.4 张量的数学操作

在PyTorch中,张量数学运算是非常重要的,它们包括标量运算、向量运算、矩阵运算等。以下是一些常见的张量数学运算示例:

标量运算

import torch

# 创建两个张量
x = torch.tensor(3.0)
y = torch.tensor(2.0)

# 加法
result_add = x + y

# 减法
result_sub = x - y

# 乘法
result_mul = x * y

# 除法
result_div = x / y

print("Addition:", result_add)
print("Subtraction:", result_sub)
print("Multiplication:", result_mul)
print("Division:", result_div)

向量运算

import torch

# 创建两个向量
x = torch.tensor([1.0, 2.0, 3.0])
y = torch.tensor([4.0, 5.0, 6.0])

# 点积(内积)
dot_product = torch.dot(x, y)

# 元素逐一相乘
element_wise_product = x * y

print("Dot Product:", dot_product)
print("Element-wise Product:", element_wise_product)

矩阵运算

import torch

# 创建两个矩阵
A = torch.tensor([[1, 2], [3, 4]])
B = torch.tensor([[5, 6], [7, 8]])

# 矩阵乘法
matrix_product = torch.mm(A, B)

# 转置
A_transpose = A.t()

print("Matrix Product:")
print(matrix_product)
print("Transpose of A:")
print(A_transpose)

 


网站公告

今日签到

点亮在社区的每一天
去签到