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

PyTorch学习之张量(Tensor)(一)

1. 张量的基本概念

1.1. 定义与特性

张量是PyTorch中最基础的数据结构,可视为多维数组的泛化形式,支持标量(0维)、向量(1维)、矩阵(2维)及更高维度的数据存储。其核心特性包括:

  • 动态计算图:允许实时构建和调整计算流程,适合复杂模型(如RNN)的灵活设计
  • 自动微分:通过autograd模块自动计算梯度,简化反向传播的实现。
  • 设备兼容性:可无缝运行于CPU或GPU,利用GPU加速大规模计算
1.2. 数据类型与设备

PyTorch张量支持多种数据类型:

  • 数值类型:如torch.FloatTensor(32位浮点数)、torch.LongTensor(64位整数)
  • 布尔类型:torch.BoolTensor用于逻辑运算

通过.dtype查看数据类型,.device确认存储位置(CPU/GPU)。

2. 张量的创建与初始化

2.1. 直接创建
  • 使用torch.tensor()从Python列表或NumPy数组转换:
	data = [[1, 2], [3, 4]]tensor = torch.tensor(data)  # 自动推断数据类型
  • 特定初始化方法:
    • torch.zeros()生成全零张量,torch.rand()生成均匀分布随机数
    • torch.arange()生成序列值,torch.eye()创建单位矩阵
2.2. 从NumPy转换

PyTorch与NumPy可共享底层内存,实现高效数据交互:

	   np_array = np.array([[1, 2], [3, 4]])tensor_from_np = torch.from_numpy(np_array)  # 转换为张量np_from_tensor = tensor.numpy()              # 转回NumPy数组

需注意内存连续性,必要时使用.contiguous()

3. 张量的核心操作

3.1. 数学运算
  • 逐元素运算:加法(+)、乘法(*)、绝对值(torch.abs())等
  • 矩阵运算:矩阵乘法(torch.mm())、转置(.t().transpose()
  • 统计运算:求和(.sum())、均值(.mean())、最大值(.max()
3.2. 索引与切片

语法与NumPy类似,支持多维索引和布尔筛选:

	   tensor_2d = torch.tensor([[1, 2, 3], [4, 5, 6]])print(tensor_2d[0, 1])     # 输出2(第1行第2列)print(tensor_2d[:, 1:3])   # 切片所有行的第2-3列
3.3. 形状重塑与广播
  • 重塑:通过.view().reshape()调整形状,需保持元素总数一致
  • 广播机制:自动扩展不同形状张量的维度以匹配运算,如向量与矩阵相加

4. 高级特性与优化

4.1. 自动微分与梯度计算

设置requires_grad=True启用梯度跟踪,backward()自动计算梯度:

	   x = torch.tensor([1.0, 2.0], requires_grad=True)y = x ** 2y.sum().backward()  # 计算梯度print(x.grad)       # 输出[2.0, 4.0]

通过torch.no_grad()临时禁用梯度以提升性能。

4.2. GPU加速与内存管理
  • 设备切换:使用.to('cuda')将张量移至GPU,利用并行计算加速
  • 内存优化:采用in-place操作(如.add_())减少内存占用

总结

PyTorch 张量是深度学习任务的核心载体,其灵活的操作接口、高效的GPU加速能力与自动微分特性,使其成为模型开发与优化的基石。

http://www.xdnf.cn/news/271963.html

相关文章:

  • 【Mytais系列】Datasource模块:数据源连接
  • MCP 探索:browser tools MCP + Cursor 可以实现哪些能力
  • VBA 64位API声明语句第009讲
  • 2025深圳杯(东三省)数学建模竞赛D题完整分析论文(共36页)(含模型、可运行代码、数据结果)
  • (超2万字数详解)C++学习之类与对象
  • SwiftUI-MLX本地大模型开发(二)
  • 射频指标互调与交调简略
  • ubuntu使用apt安装软件
  • python中的yield关键字用法
  • 数据赋能(209)——质量管理——时效性原则
  • 文献分享:抗体治疗癌症综述
  • EMMC存储性能测试方法
  • FramePack部署(从PyCharm解释器创建和使用开始)保姆级教程
  • 基于SpringBoot的篮球竞赛预约平台设计与实现
  • 数据赋能(210)——质量管理——可靠性原则
  • FastAPI系列13:API的安全防护
  • 经典算法 最小生成树(prim算法)
  • QT6 源(70):阅读与注释按钮类 QPushButton,及各种属性验证,
  • 返回倒数第k个节点题解
  • 学习黑客分析案例
  • 山东大学计算机组成与设计第九、十章习题解析
  • 延时启动windows中程序
  • C++Primerplus编程练习 第五章
  • 继V1.5之后,幻方又发布了 DeepSeek-Prover-V2-671B,参数提升100倍
  • 【AI平台】n8n入门6:调用MCP服务(非社区节点)
  • 构建灵活的配置管理系统:YAML 与 TOML 的应用与热更新实践
  • 生成树、Prime、Kruskal
  • 第40课 常用快捷操作——按“Tab键”即时更改属性
  • 为什么需要启动探针(StartupProb)?
  • neatchat轻量级丝滑的ai模型web客户端