当前位置: 首页 > 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加速能力与自动微分特性,使其成为模型开发与优化的基石。

相关文章:

  • 嵌入式硬件篇---STM32F103C8T6STM32F103RCT6
  • 用单目相机和apriltag二维码aruco实现单目定位
  • 小程序滚动条隐藏(uniapp版本)
  • CSS元素动画篇:基于当前位置的变换动画(合集篇)
  • Spring Boot 微服务打包为 Docker 镜像并部署到镜像仓库实战案例
  • Manus联合创始人:公司产品基于Claude和阿里千问大模型开发
  • 【项目归档】数据抓取+GenAI+数据分析
  • 【安装指南】Docker 安装最新版 Nginx 并进行项目的编排
  • 《Linux macOS :GCC升级方法》
  • rhce第二次作业
  • Elasticsearch 中的索引模板:如何使用可组合模板
  • 快速搭建并学会使用Mybatis!!
  • Linux中进程的属性:进程优先级
  • Pytorch-CUDA版本环境配置
  • The Traitor King (10 player 25 player)
  • 哈希函数详解(SHA-2系列、SHA-3系列、SM3国密)案例:构建简单的区块链——密码学基础
  • 游戏引擎学习第256天:XBox 控制器卡顿和修复 GL Blit 伽玛问题
  • 数据分析与可视化实战:从鸢尾花到乳腺癌数据集
  • AI日报 · 2025年5月03日|Perplexity 集成 WhatsApp,苹果传与 Anthropic 合作开发 Xcode
  • list类的详细讲解
  • 五一假期上海边检查验出入境人员超61万人次,同比增长23%
  • 多省份晒出“五一”旅游“成绩单”:北京游客接待量、旅游消费创历史新高
  • 胡塞武装称以色列所有机场均为其打击目标
  • 三亚回应“买水果9斤变6斤”:反映属实,拟对流动摊贩罚款5万元
  • 宋徽宗《芙蓉锦鸡图》亮相,故宫首展历代动物绘画
  • 首映|“凤凰传奇”曾毅:拍电影,我是认真的