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

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.xdnf.cn/news/15066.html

相关文章:

  • TCP-与-UDP-协议详解:原理、区别与应用场景全解析
  • 使用SpringAOP自定义权限控制注解
  • UE5 Rotate 3 Axis In One Material
  • Android Studio 打 release 包 Algorithm HmacPBESHA256 not available 问题解决
  • Vue 中监测路由变化时,通常不需要开启深度监听(deep: true)
  • Linux中rw-rw-r--相关的访问权限讲解
  • android TabLayout 标题栏切换 事件拦截
  • 达梦数据库不兼容 SQL_NO_CACHE 报错解决方案
  • 三、神经网络——网络优化方法
  • Ansible:强大的自动部署工具
  • 线上事故处理记录
  • STM32单片机_3
  • Linux驱动开发(platform 设备驱动)
  • RV1126平台(Buildroot Linux)+ SunplusIT SPCA2688 USB摄像头 RTSP推流全流程复盘与问题解决记录
  • 对象序列化与反序列化
  • 快速将照片从三星手机传输到电脑
  • 节点小宝:手机图片备份至电脑功能实测体验
  • linux系统---ISCSI存储服务
  • GitHub信息收集
  • Flutter跨平台开发全解析
  • 从Rust模块化探索到DLB 2.0实践|得物技术
  • Spring Boot 企业级动态权限全栈深度解决方案,设计思路,代码分析
  • 深度学习与图像处理案例 │ 基于深度学习的自动驾驶小车
  • 降低新品试错成本,助力可持续增长
  • ubuntu server远程连接
  • AT9850B北斗双频导航定位芯片简介
  • 9N70-ASEMI太阳能逆变器专用9N70
  • 搭建自动化工作流:探寻解放双手的有效方案(1)
  • 测试开发和后端开发到底怎么选?
  • Leetcode刷题营第十九题:对链表进行插入排序