PyTorch torch

2025-06-25 11:55 更新

一、PyTorch 简介

PyTorch 是一款开源的机器学习框架,它具有以下优势:

  • 动态计算图:PyTorch 使用动态计算图,使得用户在调试和构建模型时更加灵活。
  • 强大的 GPU 支持:PyTorch 提供了对 NVIDIA GPU 的良好支持,加速计算过程。
  • 易于使用的 API:PyTorch 的 API 设计简洁直观,便于上手,适合初学者。

二、张量(Tensor)基础

张量是 PyTorch 中最基本的数据结构,用于表示多维数组。

1. 创建张量

import torch


## 创建一个空张量
empty_tensor = torch.empty(2, 3)
print("空张量:", empty_tensor)


## 创建一个全零张量
zero_tensor = torch.zeros(2, 3)
print("全零张量:", zero_tensor)


## 创建一个全一的张量
ones_tensor = torch.ones(2, 3)
print("全一的张量:", ones_tensor)


## 创建一个从 0 到 4 的一维张量
arange_tensor = torch.arange(5)
print("从 0 到 4 的一维张量:", arange_tensor)


## 创建一个指定范围和步长的一维张量
linspace_tensor = torch.linspace(0, 10, 5)
print("指定范围和步长的一维张量:", linspace_tensor)


## 创建一个二维单位矩阵
eye_tensor = torch.eye(3)
print("二维单位矩阵:", eye_tensor)


## 创建一个指定值填充的张量
full_tensor = torch.full((2, 3), 7)
print("指定值填充的张量:", full_tensor)

运行结果示例:

空张量: tensor([[4.9444e-40, 4.6455e-40, 0.0000e+00],
        [0.0000e+00, 0.0000e+00, 0.0000e+00]])
全零张量: tensor([[0., 0., 0.],
        [0., 0., 0.]])
全一的张量: tensor([[1., 1., 1.],
        [1., 1., 1.]])
从 0 到 4 的一维张量: tensor([0, 1, 2, 3, 4])
指定范围和步长的一维张量: tensor([0., 2.5, 5., 7.5, 10.])
二维单位矩阵: tensor([[1., 0., 0.],
        [0., 1., 0.],
        [0., 0., 1.]])
指定值填充的张量: tensor([[7., 7., 7.],
        [7., 7., 7.]])

2. 张量的基本操作

## 创建两个张量
tensor_a = torch.tensor([[1, 2], [3, 4]])
tensor_b = torch.tensor([[5, 6], [7, 8]])


## 张量相加
add_result = torch.add(tensor_a, tensor_b)
print("张量相加结果:", add_result)


## 张量相减
sub_result = torch.sub(tensor_a, tensor_b)
print("张量相减结果:", sub_result)


## 张量相乘(逐元素相乘)
mul_result = torch.mul(tensor_a, tensor_b)
print("张量相乘结果:", mul_result)


## 张量矩阵乘法
matmul_result = torch.matmul(tensor_a, tensor_b)
print("张量矩阵乘法结果:", matmul_result)

运行结果示例:

张量相加结果: tensor([[6, 8],
        [10, 12]])
张量相减结果: tensor([[-4, -4],
        [-4, -4]])
张量相乘结果: tensor([[5, 12],
        [21, 32]])
张量矩阵乘法结果: tensor([[19, 22],
        [43, 50]])

三、张量的索引、切片与拼接

1. 索引与切片

## 索引操作
print("第一个元素:", tensor_a[0, 0])
print("第二行:", tensor_a[1])


## 切片操作
print("前两行:", tensor_a[:2])
print("第一列:", tensor_a[:, 0])

运行结果示例:

第一个元素: tensor(1)
第二行: tensor([3, 4])
前两行: tensor([[1, 2],
        [3, 4]])
第一列: tensor([1, 3])

2. 拼接张量

## 水平拼接
cat_result = torch.cat((tensor_a, tensor_b), dim=1)
print("水平拼接结果:", cat_result)


## 垂直拼接
stack_result = torch.stack((tensor_a, tensor_b), dim=0)
print("垂直拼接结果:", stack_result)

运行结果示例:

水平拼接结果: tensor([[1, 2, 5, 6],
        [3, 4, 7, 8]])
垂直拼接结果: tensor([[[1, 2],
         [3, 4]],


        [[5, 6],
         [7, 8]]])

四、随机抽样

## 生成均匀分布的随机数
rand_tensor = torch.rand(2, 3)
print("均匀分布随机数:", rand_tensor)


## 生成标准正态分布的随机数
randn_tensor = torch.randn(2, 3)
print("标准正态分布随机数:", randn_tensor)


## 生成指定范围的随机整数
randint_tensor = torch.randint(0, 10, (2, 3))
print("指定范围随机整数:", randint_tensor)

运行结果示例:

均匀分布随机数: tensor([[0.1234, 0.5678, 0.9012],
        [0.3456, 0.7890, 0.2345]])
标准正态分布随机数: tensor([[0.1234, -0.5678, 0.9012],
        [-0.3456, 0.7890, -0.2345]])
指定范围随机整数: tensor([[2, 5, 7],
        [3, 8, 1]])

五、数学运算

1. 逐点操作

## 计算绝对值
abs_result = torch.abs(torch.tensor([-1, -2, 3]))
print("绝对值结果:", abs_result)


## 计算三角函数
sin_result = torch.sin(torch.tensor([0, 3.1416, 6.2832]))
print("正弦函数结果:", sin_result)
cos_result = torch.cos(torch.tensor([0, 3.1416, 6.2832]))
print("余弦函数结果:", cos_result)

运行结果示例:

绝对值结果: tensor([1, 2, 3])
正弦函数结果: tensor([0.0000, 0.0000, -0.0000])
余弦函数结果: tensor([1.0000, -1.0000, 1.0000])

2. 矩阵操作

## 矩阵转置
transpose_result = torch.transpose(tensor_a, 0, 1)
print("矩阵转置结果:", transpose_result)


## 矩阵求逆(需要矩阵可逆)
## tensor_a = torch.tensor([[4, 7], [2, 6]], dtype=torch.float32)
## inverse_result = torch.inverse(tensor_a)
## print("矩阵求逆结果:", inverse_result)

运行结果示例:

矩阵转置结果: tensor([[1, 3],
        [2, 4]])

六、代码实操环节

实操 1:创建张量并进行简单运算

## 创建两个张量
tensor_x = torch.tensor([[1.0, 2.0], [3.0, 4.0]])
tensor_y = torch.tensor([[5.0, 6.0], [7.0, 8.0]])


## 进行加减乘除运算
add_xy = torch.add(tensor_x, tensor_y)
sub_xy = torch.sub(tensor_x, tensor_y)
mul_xy = torch.mul(tensor_x, tensor_y)
div_xy = torch.div(tensor_x, tensor_y)


print("张量相加:", add_xy)
print("张量相减:", sub_xy)
print("张量相乘:", mul_xy)
print("张量相除:", div_xy)

运行结果示例:

张量相加: tensor([[6., 8.],
        [10., 12.]])
张量相减: tensor([[-4., -4.],
        [-4., -4.]])
张量相乘: tensor([[5., 12.],
        [21., 32.]])
张量相除: tensor([[0.2000, 0.3333],
        [0.4286, 0.5000]])

实操 2:随机抽样并计算均值和标准差

## 生成随机张量
random_tensor = torch.randn(100, 100)


## 计算均值和标准差
mean_value = torch.mean(random_tensor)
std_value = torch.std(random_tensor)


print("随机张量均值:", mean_value)
print("随机张量标准差:", std_value)

运行结果示例:

随机张量均值: tensor(0.0054)
随机张量标准差: tensor(0.9972)

七、总结与展望

本教程从零基础出发,带领大家认识了 PyTorch 环境,了解了张量的基本操作、索引与切片、拼接、随机抽样以及数学运算等内容。希望大家可以通过代码实操环节加强对所学知识的理解。后续可以继续探索更多 PyTorch 相关知识,如自动梯度、神经网络构建与训练等。

以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号