当前位置: 首页 > news >正文

PyTorch Tensor 的创建与操作入门

目录

1. 了解Tensor 

1.1 概念

1.2 特点

1.3 数据类型

2. PyTorch Tensor 的创建

2.1 使用 torch.tensor()

2.2 使用 torch.Tensor()

2.3 使用 torch.arange() 和 torch.linspace()

2.4 使用 torch.randn()

3. Tensor 的设备切换

3.1 在创建 Tensor 时指定设备

3.2 使用 to() 方法切换设备

2.3 使用 cuda() 和 cpu() 方法

4. 数据类型转换

5. 完整代码示例

6. 总结


在深度学习中,Tensor(张量)是核心数据结构,所谓张量就是元素为相同类型的多维矩阵,类似于 NumPy 中的数组,但可以在 GPU 上高效运行。PyTorch 提供了丰富的 API 来创建和操作 Tensor。今天,我们就来通过一个简单的代码示例,学习 PyTorch 中 Tensor 的创建、设备切换、数据类型转换等基本操作。

1. 了解Tensor 

1.1 概念

张量是一个多维数组,通俗来说可以看作是扩展了标量、向量、矩阵的更高维度的数组。张量的维度决
定了它的形状(Shape),例如:
标量 0 维张量,如 a = torch.tensor(2)
向量 1 维张量,如 b = torch.tensor([1, 2, 3])
矩阵 2 维张量,如 c = torch.tensor([[1, 2], [3, 4]])
更高维度的张量,如3维、4维等,通常用于表示图像、视频数据等复杂结构。

1.2 特点

1.多维数组的推广
张量是标量(0 维张量)、向量(1 维张量)、矩阵(2 维张量)的高维扩展,维度(阶数)可灵活定义(如 3 维、4 维等),能自然表示高维数据(如图像的 [batch, 高,宽,通道])。

2.形状与元素组织
每个张量有明确的 “形状”(shape),即各维度的元素数量(如 (2,3,4) 表示 3 维张量,共 2×3×4=24 个元素),元素按规则的网格结构排列,便于高效存储和计算。

3.数值类型统一性
张量内所有元素通常为同一数据类型(如 float32、int64),保证计算时的一致性和效率,这是与 Python 列表(可混合类型)的关键区别。

4.支持高效运算
张量可通过 GPU 等硬件加速并行计算,配合 PyTorch、TensorFlow 等框架的算子(如加减、卷积、矩阵乘法),能高效处理大规模数据。

5.关联数学意义
在物理和数学中,张量具有 “坐标变换不变性”,可描述向量、线性变换等在不同坐标系下的统一规律(如应力张量、电磁张量)。

简言之,张量是兼具灵活性(高维表示)、结构性(固定形状)和高效性(并行计算)的数据载体,是处理复杂多维信息的核心工具。

1.3 数据类型

PyTorch中有3种数据类型:浮点数、整数、布尔。其中,浮点数和整数又分为8位、16位、32位、64 位,加起来共9种。

2. PyTorch Tensor 的创建

2.1 使用 torch.tensor()

torch.tensor() 是一个非常灵活的函数,可以用来创建 Tensor。你可以指定数据类型(dtype)和设备(device)。

t1 = torch.tensor([1, 2, 3, 4], dtype=torch.int32, device='cuda')
print(t1)
  • dtype=torch.int32:指定数据类型为 32 位整数。

  • device='cuda':指定 Tensor 存储在 GPU 上。

2.2 使用 torch.Tensor()

torch.Tensor() 是一个构造函数,用于创建一个随机初始化的 Tensor。如果你不指定数据,它会自动填充随机值。

t2 = torch.Tensor(3, 2)
print(t2)
  • 3, 2:表示创建一个 3 行 2 列的 Tensor。

2.3 使用 torch.arange() 和 torch.linspace()

torch.arange()torch.linspace() 是两个非常有用的函数,用于创建具有特定范围和步长的 Tensor。

t4 = torch.arange(0, 10, 2)
print(t4)t5 = torch.linspace(0, 10, steps=5)
print(t5)
  • torch.arange(start, end, step):从 start 开始,到 end 结束,步长为 step

  • torch.linspace(start, end, steps):从 start 开始,到 end 结束,生成指定步数的 Tensor。

2.4 使用 torch.randn()

torch.randn() 用于生成正态分布的随机 Tensor,均值为 0,方差为 1。

torch.manual_seed(0)  # 设置随机数种子
t6 = torch.randn(3, 2)
print(t6)
  • 3, 2:表示生成一个 3 行 2 列的 Tensor。

  • torch.manual_seed(0):设置随机数种子,确保每次运行程序时生成的随机数相同。

3. Tensor 的设备切换

在 PyTorch 中,Tensor 可以在 CPU 和 GPU 之间切换。这在深度学习中非常重要,因为 GPU 可以加速计算。

3.1 在创建 Tensor 时指定设备

device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
t7 = torch.tensor([1, 2, 3, 4, 5], device=device)
print(t7.device)

3.2 使用 to() 方法切换设备

t8 = torch.tensor([1, 2, 3, 4, 5, 6]
device = "cuda" if torch.cuda.is_available() else "cpu"
t8 = t8.to(device)
print(t8.device)

2.3 使用 cuda() 和 cpu() 方法

# 切换GPU
t9 = t8.cuda()
print(t9.device)
# 切换cpu
t9 = t8.cpu()
print(t9.device)

4. 数据类型转换

PyTorch 支持多种数据类型,如 torch.float32torch.int32 等。可以通过 to() 方法进行转换。

t10 = t8.to(torch.float32)
print(t10.dtype)
  • t8.to(torch.float32):将 Tensor 的数据类型转换为 32 位浮点数。

5. 完整代码示例

import torch# print(torch.__version__)
# print(torch.cuda.is_available())'''
tensor():可以指定数据的的type、device等属性
Tensor():构造函数,按照默认的方式创建tensor
'''def test01():t1 = torch.tensor([1, 2, 3, 4], dtype=torch.int32, device='cpu')print(t1)t2 = torch.Tensor(3,2)print(t2)t3 = torch.Tensor([1, 2, 3, 4])print(t3)print(t3.dtype)t4 = torch.arange(0, 10, 2)print(t4)t5 = torch.linspace(0, 10, steps=5)print(t5)# randn:随机创建正态分布的数值,均值为0,方差为1# 参数:创建3个样本,每个样本有2个特征,或者创建3行2列的矩阵# torch.manual_seed(0):设置随机数种子,保证每次运行程序时,生成的随机数相同torch.manual_seed(0)t6 = torch.randn(3, 2)print(t6)# tensor切换设备的三种方式# 1.直接指定,在创建tensor时指定device参数# 2.使用to()方法,将tensor切换到指定设备# 3.使用cuda()方法,将tensor切换到GPU设备,如果要切换到CPU,可以使用cpu()方法device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')t7 = torch.tensor([1, 2, 3, 4, 5], device=device)print(t7.dtype, t7.shape, t7.device)t8 = torch.tensor([1, 2, 3, 4, 5, 6])t8.to(device)print(t8.device)t9 = t8.cpu()print(t9.device)# 数据类型转换t10 = t8.to(torch.float32)print(t10.dtype)if __name__ == '__main__':test01()

6. 总结

通过这篇文章,我们学习了 PyTorch 中 Tensor 的基本操作,包括:

  • Tensor的概念。

  • 如何创建 Tensor。

  • 如何在 CPU 和 GPU 之间切换 Tensor。

  • 如何转换 Tensor 的数据类型。

这些操作是深度学习的基础,希望这篇文章能帮助你更好地理解和使用 PyTorch!

http://www.dtcms.com/a/272202.html

相关文章:

  • 低版本hive(1.2.1)UDF实现清除历史分区数据
  • 1.1.1数据类型与变量——AI教你学Django
  • 基于Uniapp+MySQL+PHP的景区多商户小程序源码系统 带完整的搭建指南
  • vue引入应用通义AI大模型-(一)前期准备整理思路
  • idea如何打开extract surround
  • 【CPU】不同核数下的翻译
  • hbuilder开发app记录
  • ReaLTaiizor:WinForms 界面设计利器
  • 《未来已来:当人类智慧遇上AI智能体》
  • 【WPF实战】MVVM中如何从数据模型反查自定义控件实例(ImageView + Halcon)
  • 学习开发之条件函数
  • 如何用 LangChain 自定义 Chat Model —— 测试工程师实践指南
  • Maven生命周期:构建流程深度解析
  • eVTOL动力测试台架气动干扰分析与应对措施
  • TestCafe ➜ Playwright fixture 架构迁移指南
  • 上位机与Modbus的32位数据交互
  • 嘿嘿嘿嘿嘿
  • C++---多态
  • Camera2API笔记
  • Unity WebGL文本输入
  • centos7 安装jenkins
  • jenkins部署springboot项目
  • 抽象类与接口:Java面向对象设计的两大支柱
  • 表达式索引海外云持久化实践:关键技术解析与性能优化
  • Spring Boot 整合 RabbitMQ
  • 【前端】接口日志追踪
  • 06.消息传递网络
  • 「日拱一码」023 机器学习——超参数优化
  • 判断当前是否为钉钉环境
  • 【Pandas】pandas DataFrame from_dict