【AI】《动手学-深度学习-PyTorch版》笔记(三):PyTorch常用函数
发布人:shili8
发布时间:2025-03-15 00:47
阅读次数:0
**《动手学-深度学习-PyTorch版》笔记(三)**
在前两篇笔记中,我们已经了解了PyTorch的基本概念、数据加载和预处理、模型定义等内容。在本篇笔记中,我们将重点介绍PyTorch常用函数,帮助你更好地掌握PyTorch的使用。
###1. PyTorch常用函数####1.1 `torch.tensor()`
`torch.tensor()` 是创建张量(Tensor)的基本方法。它可以从多种数据类型中创建张量,如 NumPy 数组、Python 列表等。
import torch# 从 NumPy 数组创建张量np_array = np.array([1,2,3]) tensor = torch.tensor(np_array) print(tensor) # tensor([1,2,3]) # 从 Python 列表创建张量list_ = [4,5,6] tensor = torch.tensor(list_) print(tensor) # tensor([4,5,6])
####1.2 `torch.zeros()` 和 `torch.ones()`
`torch.zeros()` 和 `torch.ones()` 分别用于创建全零张量和全一张量。
import torch# 创建全零张量zero_tensor = torch.zeros(3) print(zero_tensor) # tensor([0.,0.,0.]) # 创建全一张量one_tensor = torch.ones(4) print(one_tensor) # tensor([1.,1.,1.,1.])
####1.3 `torch.randn()` 和 `torch.normal()`
`torch.randn()` 和 `torch.normal()` 分别用于创建标准正态分布和均值为μ、方差为σ2的正态分布。
import torch# 创建标准正态分布张量randn_tensor = torch.randn(2,3) print(randn_tensor) # 创建均值为0、方差为1的正态分布张量normal_tensor = torch.normal(mean=0, std=1, size=(2,3)) print(normal_tensor)
####1.4 `torch.cat()` 和 `torch.stack()`
`torch.cat()` 和 `torch.stack()` 分别用于沿着维度拼接张量。
import torch# 创建两个张量tensor1 = torch.tensor([1,2]) tensor2 = torch.tensor([3,4]) # 使用 torch.cat() 拼接张量cat_tensor = torch.cat((tensor1, tensor2), dim=0) print(cat_tensor) # tensor([1,2,3,4]) # 使用 torch.stack() 拼接张量stack_tensor = torch.stack((tensor1, tensor2)) print(stack_tensor) # tensor([[1,2], [3,4]])
####1.5 `torch.index_select()` 和 `torch.gather()`
`torch.index_select()` 和 `torch.gather()` 分别用于根据索引选择张量中的元素。
import torch# 创建一个张量tensor = torch.tensor([[1,2], [3,4]]) # 使用 torch.index_select() 根据索引选择元素index_tensor = torch.tensor([0,1]) select_tensor = torch.index_select(tensor, dim=0, index=index_tensor) print(select_tensor) # tensor([[1,2], [3,4]]) # 使用 torch.gather() 根据索引选择元素gather_tensor = torch.gather(tensor, dim=0, index=index_tensor) print(gather_tensor) # tensor([[1,2], [3,4]])
####1.6 `torch.matmul()` 和 `torch.mm()`
`torch.matmul()` 和 `torch.mm()` 分别用于计算张量的矩阵乘法。
import torch# 创建两个张量tensor1 = torch.tensor([[1,2], [3,4]]) tensor2 = torch.tensor([[5,6], [7,8]]) # 使用 torch.matmul() 计算矩阵乘法matmul_tensor = torch.matmul(tensor1, tensor2) print(matmul_tensor) # 使用 torch.mm() 计算矩阵乘法mm_tensor = torch.mm(tensor1, tensor2) print(mm_tensor)
####1.7 `torch.t()` 和 `torch.transpose()`
`torch.t()` 和 `torch.transpose()` 分别用于计算张量的转置。
import torch# 创建一个张量tensor = torch.tensor([[1,2], [3,4]]) # 使用 torch.t() 计算转置t_tensor = torch.t(tensor) print(t_tensor) # tensor([[1,3], [2,4]]) # 使用 torch.transpose() 计算转置transpose_tensor = torch.transpose(tensor, dim0=0, dim1=1) print(transpose_tensor) # tensor([[1,3], [2,4]])
####1.8 `torch.sum()` 和 `torch.prod()`
`torch.sum()` 和 `torch.prod()` 分别用于计算张量的和和积。
import torch# 创建一个张量tensor = torch.tensor([1,2,3]) # 使用 torch.sum() 计算和sum_tensor = torch.sum(tensor) print(sum_tensor) # tensor(6) # 使用 torch.prod() 计算积prod_tensor = torch.prod(tensor) print(prod_tensor) # tensor(6)
####1.9 `torch.mean()` 和 `torch.median()`
`torch.mean()` 和 `torch.median()` 分别用于计算张量的平均值和中位数。
import torch# 创建一个张量tensor = torch.tensor([1,2,3]) # 使用 torch.mean() 计算平均值mean_tensor = torch.mean(tensor) print(mean_tensor) # tensor(2.) # 使用 torch.median() 计算中位数median_tensor = torch.median(tensor) print(median_tensor) # tensor(2.)
####1.10 `torch.std()` 和 `torch.var()`
`torch.std()` 和 `torch.var()` 分别用于计算张量的标准差和方差。
import torch# 创建一个张量tensor = torch.tensor([1,2,3]) # 使用 torch.std() 计算标准差std_tensor = torch.std(tensor) print(std_tensor) # tensor(0.8165) # 使用 torch.var() 计算方差var_tensor = torch.var(tensor) print(var_tensor) # tensor(0.6667)
####1.11 `torch.max()` 和 `torch.min()`
`torch.max()` 和 `torch.min()` 分别用于计算张量的最大值和最小值。
import torch# 创建一个张量tensor = torch.tensor([1,2,3]) # 使用 torch.max() 计算最大值max_tensor = torch.max(tensor) print(max_tensor) # tensor(3) # 使用 torch.min() 计算最小值min_tensor = torch.min(tensor) print(min_tensor) # tensor(1)
####1.12 `torch.argmin()` 和 `torch.argmax()`
`torch.argmin()` 和 `torch.argmax()` 分别用于计算张量的索引最大值和最小值。
import torch# 创建一个张量tensor = torch.tensor([1,2,3]) # 使用 torch.argmin() 计算索引最大值argmin_tensor = torch.argmin(tensor) print(argmin_tensor) # tensor(0) # 使用 torch.argmax() 计算索引最小值argmax_tensor = torch.argmax(tensor) print(argmax_tensor) # tensor(2)
####1.13 `torch.allclose()` 和 `torch.isclose()`
`torch.allclose()` 和 `torch.isclose()` 分别用于检查两个张量是否相等。
import torch# 创建两个张量tensor1 = torch.tensor([1,2]) tensor2 = torch.tensor([1.000001,2]) # 使用 torch.allclose() 检查是否相等allclose_tensor = torch.allclose(tensor1, tensor2) print(allclose_tensor) # tensor(True) # 使用 torch.isclose() 检查是否相等isclose_tensor = torch.isclose(tensor1, tensor2) print(isclose_tensor) # tensor(True)
####1.14 `torch.any()` 和 `torch.all()`
`torch.any()` 和 `torch.all()` 分别用于检查张量中是否有元素为True或所有元素都为True。
import torch# 创建一个张量tensor = torch.tensor([True, False]) # 使用 torch.any() 检查是否有元素为Trueany_tensor = torch.any(tensor) print(any_tensor) # tensor(True) # 使用 torch.all() 检查所有元素都为Trueall_tensor = torch.all(tensor) print(all_tensor) # tensor(False)
####1.15 `torch.isnan()` 和