PyTorch 中 12 种张量操作详解

创作不易,还请各位同学三连点赞!!收藏!!转发!!!

对于刚入门学习Python还找不到方向的小伙伴可以试试我的这份学习方法和籽料,免费自取!!

PyTorch 是一个强大的深度学习框架,它允许开发者轻松地定义和训练神经网络。张量是 PyTorch 的核心数据结构,类似于 NumPy 数组,但支持自动微分以及在 GPU 上加速计算。本文将详细介绍 PyTorch 中常用的 12 种张量操作,帮助你更好地理解和使用这个工具。

1. 创建张量

首先,我们需要安装 PyTorch 并导入必要的库。

# 安装 PyTorch  
!pip install torch  
  
# 导入 PyTorch 库  
import torch  

创建张量是最基本的操作之一。你可以从 Python 列表或 NumPy 数组中创建张量。

# 从列表创建张量  
tensor_from_list = torch.tensor([1, 2, 3])  
print(tensor_from_list)  # 输出: tensor([1, 2, 3])  
  
# 从 NumPy 数组创建张量  
import numpy as np  
numpy_array = np.array([1, 2, 3])  
tensor_from_numpy = torch.from_numpy(numpy_array)  
print(tensor_from_numpy)  # 输出: tensor([1, 2, 3])  

2. 查看张量形状

了解张量的形状对于处理数据非常重要。

# 创建一个 2x3 的矩阵  
matrix = torch.tensor([[1, 2, 3], [4, 5, 6]])  
print(matrix.shape)  # 输出: torch.Size([2, 3])  

3. 转置张量

转置可以改变张量的维度顺序。

# 创建一个 2x3 的矩阵  
matrix = torch.tensor([[1, 2, 3], [4, 5, 6]])  
transposed_matrix = matrix.t()  
print(transposed_matrix)  # 输出:  
# tensor([[1, 4],  
#         [2, 5],  
#         [3, 6]])  

4. 拆分张量

拆分张量可以帮助你在不同维度上分割数据。

# 创建一个 3x4 的矩阵  
matrix = torch.tensor([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]])  
split_tensors = torch.split(matrix, split_size=2, dim=1)  
for t in split_tensors:  
    print(t)  
# 输出:  
# tensor([[ 1,  2],  
#         [ 5,  6],  
#         [ 9, 10]])  
# tensor([[ 3,  4],  
#         [ 7,  8],  
#         [11, 12]])  

5. 拼接张量

拼接操作可以将多个张量合并成一个更大的张量。

# 创建两个 2x2 的矩阵  
matrix1 = torch.tensor([[1, 2], [3, 4]])  
matrix2 = torch.tensor([[5, 6], [7, 8]])  
concatenated_tensor = torch.cat((matrix1, matrix2), dim=0)  
print(concatenated_tensor)  # 输出:  
# tensor([[1, 2],  
#         [3, 4],  
#         [5, 6],  
#         [7, 8]])  

6. 张量索引

索引操作允许你选择张量中的特定元素或子集。

# 创建一个 2x3 的矩阵  
matrix = torch.tensor([[1, 2, 3], [4, 5, 6]])  
element = matrix[0, 1]  
print(element)  # 输出: tensor(2)  
  
sub_matrix = matrix[1, :]  
print(sub_matrix)  # 输出: tensor([4, 5, 6])  

7. 张量切片

切片可以让你选择张量的一部分。

# 创建一个 2x3 的矩阵  
matrix = torch.tensor([[1, 2, 3], [4, 5, 6]])  
slice_tensor = matrix[:, 1:]  
print(slice_tensor)  # 输出:  
# tensor([[2, 3],  
#         [5, 6]])  

8. 张量广播

广播是一种机制,允许你执行不同形状的张量之间的操作。

# 创建一个 1x3 的向量和一个标量  
vector = torch.tensor([1, 2, 3])  
scalar = torch.tensor(2)  
  
# 将向量乘以标量  
broadcasted_tensor = vector * scalar  
print(broadcasted_tensor)  # 输出: tensor([2, 4, 6])  

9. 张量相加

相加操作用于将两个张量对应位置的元素相加。

# 创建两个 2x2 的矩阵  
matrix1 = torch.tensor([[1, 2], [3, 4]])  
matrix2 = torch.tensor([[5, 6], [7, 8]])  
  
# 相加  
sum_tensor = matrix1 + matrix2  
print(sum_tensor)  # 输出:  
# tensor([[ 6,  8],  
#         [10, 12]])  

10. 张量乘法

乘法操作可以用于点积或矩阵乘法。

# 创建两个 2x2 的矩阵  
matrix1 = torch.tensor([[1, 2], [3, 4]])  
matrix2 = torch.tensor([[5, 6], [7, 8]])  
  
# 点积  
dot_product = torch.dot(matrix1.view(-1), matrix2.view(-1))  
print(dot_product)  # 输出: tensor(70)  
  
# 矩阵乘法  
matrix_product = torch.matmul(matrix1, matrix2)  
print(matrix_product)  # 输出:  
# tensor([[19, 22],  
#         [43, 50]])  

11. 张量归一化

归一化可以将张量的值调整到特定范围内。

# 创建一个 1x3 的向量  
vector = torch.tensor([1, 2, 3])  
  
# 归一化  
normalized_vector = torch.nn.functional.normalize(vector, p=2, dim=0)  
print(normalized_vector)  # 输出: tensor([0.2673, 0.5345, 0.8018])  

12. 张量随机初始化

随机初始化在神经网络训练中非常重要。

# 随机初始化一个 2x3 的矩阵  
random_matrix = torch.randn(2, 3)  
print(random_matrix)  # 输出类似:  
# tensor([[ 1.0431, -0.1827, -0.2591],  
#         [-0.2442, -0.3353,  0.4927]])  

总结

本文详细介绍了 PyTorch 中常用的 12 种张量操作,包括创建张量、查看张量形状、转置张量、拆分张量、拼接张量、张量索引、张量切片、张量广播、张量相加、张量乘法、张量归一化和张量随机初始化。这些操作是使用 PyTorch 进行深度学习的基础,掌握它们将有助于你更高效地开发和训练神经网络模型。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/900811.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

无人机喊话器详解!

喊话器材料 外壳常采用尼龙纤维增强材料,这种材料具有抗摔、抗震、轻便、灵活、质量稳定、操作简单等优点,能够满足不同场景的需求。 喊话范围 无人机喊话器的喊话范围主要取决于设备的型号、环境条件以及喊话器的性能参数。一般来说,无人…

【334】基于springboot的仓库管理系统

本科毕业设计论文 题目:仓库管理系统设计与实现 摘 要 信息内容数据从传统到当今,一直在改变,忽然互联网技术让传统信息内容管理见到划时代的黎明,由于传统信息内容管理从时效性、安全系数、可执行性等多个方面,碰到…

rsync算法原理

1. 简介 rsync是一种文件同步的工具,也是一种算法。 2. 算法原理 背景:计算机 α \alpha α 上有文件 a, 计算机 β \beta β上有文件b。要对这两个文件进行同步。 β \beta β将文件b分成大小为S字节的若干块,最后一份可能不足S字节对于b…

中小企业设备维护新策略:Spring Boot系统设计与实现

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统,它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等,非常…

安灯系统助力汽车零部件工厂快速解决生产异常

在汽车零部件制造领域,高效的生产管理和快速解决异常情况是确保产品质量和生产进度的关键。而安灯系统的应用,正为汽车零部件工厂带来了全新的变革,助力其快速解决生产异常。 汽车零部件工厂的生产报工产线看板直观地反映出生产的各项关键数据…

Redis的RDB执行原理

引入‘页表’的概念 Linux里面每个进程都是无法直接操作物理内存的,每个进程只能用页表映射本进程的虚拟内存到物理内存的映射。 bgsave的时候,主进程会fork(复制)一个子进程,然后该过程仅仅复制了页表。复制页表的过程…

使用 ASP.NET Core 8.0 创建最小 API

构建最小 API,以创建具有最小依赖项的 HTTP API。 它们非常适合需要在 ASP.NET Core 中仅包括最少文件、功能和依赖项的微服务和应用。 本教程介绍使用 ASP.NET Core 生成最小 API 的基础知识。 在 ASP.NET Core 中创建 API 的另一种方法是使用控制器。 有关在最小 …

使用 pydub 的 AudioSegment 获取音频时长 - python 实现

通过使用 pydub 的 AudioSegment 获取音频时长,音频常用格式如 m4a,wav等。 安装 python 库: pip install pydub 获取 m4a 格式的音频时长代码如下,代码如下: #-*-coding:utf-8-*- # date:2024-10 # Author: DataBall - XIAN #…

【云效】阿里云云效:一站式DevOps平台介绍与使用教程(图文)附PPT

【云效】阿里云云效:一站式DevOps平台介绍与使用教程(图文) 云效费用企业管理项目协作代码管理自动流水线测试管理扩展资料附:PPT版文件下载参考资料: https://devops.aliyun.com/ 云效 阿里云一站式DevOps(持续交付)平台,项目数字化协作能效工具。 官方介绍: 云效,一…

bindService 流程学习总结

Context.bindServiceContextImpl.bindServiceCommonActivityManagerService.bindIsolatedService ActiveServices.bindIsolatedServiceretrieveServiceLocked 获取服务信息;bringUpServiceLocked 拉起服务startProcessLocked创建进程 (进程不存在时)realStartServi…

【Android】MVP架构

MVP架构简介 MVP(Model-View-Presenter)是一种常见的软件架构模式,尤其在Android应用开发中被广泛使用。它将应用程序分为三层:Model、View 和 Presenter,以实现职责分离,提高代码的可维护性和可测试性。 …

ant design vue树选择器实现部分层级禁用(指定层级或依据字段判断)

1、依据字段判断是否禁用 const handData (array, level?) > {array.forEach((item) > {if (level 0) {//获取一级菜单item.title item.levelName;item.value item.code;if (item.type LAYER) {item.disabled true;} else if (item.type JOB) {item.disabled f…

分享几个办公类常用的AI工具

办公类 WPS AI讯飞智文iSlideProcessOn亿图脑图ChatPPT WPS AI 金山办公推出的协同办公 AI 应用,具有文本生成、多轮对话、润色改写等多种功能,可以辅助用户进行文档编辑、表格处理、演示文稿制作等办公操作。 https://ai.wps.cn/ 讯飞智文 科大讯飞推…

OceanBase 首席科学家阳振坤:大模型时代的数据库思考

2024年 OceanBase 年度大会 即将于10月23日,在北京举行。 欢迎到现场了解更多“SQL AI ” 的探讨与分享! 近期,2024年金融业数据库技术大会在北京圆满举行,聚焦“大模型时代下数据库的创新发展”议题,汇聚了国内外众多…

85.【C语言】数据结构之顺序表的中间插入和删除及遍历查找

目录 3.操作顺序表 1.分析中间插入函数 函数的参数 代码示例 图片分析 main.c部分改为 在SeqList.h添加SLInsert函数的声明 运行结果 2.分析中间删除函数 函数的参数 代码示例 图片分析 main.c部分改为 在SeqList.h添加SLErase函数的声明 运行结果 承接84.【C语…

前端开发:Vue中数据绑定原理

Vue 中最大的一个特征就是数据的双向绑定,而这种双向绑定的形式,一方面表现在元数据与衍生数据之间的响应,另一方面表现在元数据与视图之间的响应,而这些响应的实现方式,依赖的是数据链,因此,要…

未来汽车驾驶还会有趣吗?车辆动力学系统简史

未来汽车驾驶还会有趣吗?车辆动力学系统简史 本篇文章来源:Schmidt, F., Knig, L. (2020). Will driving still be fun in the future? Vehicle dynamics systems through the ages. In: Pfeffer, P. (eds) 10th International Munich Chassis Symposiu…

量子纠错--shor‘s 码

定理1 (量子纠错的条件) C是一组量子编码,P是映射到C上的投影算子。假设是一个算子元素描述的量子操作,那么基于量子编码C,存在一个能对抗描述的噪声的纠错操作R的充要条件是 对某个复元素厄米矩阵成立。 将算子元素称为导致的错误。如果这样…

【大模型实战篇】大模型分词算法Unigram及代码示例

1. 算法原理介绍 与 BPE 分词(参考《BPE原理及代码示例》)和 WordPiece 分词(参考《WordPiece原理及代码示例》)不同,Unigram 分词方法【1】是从一个包含足够多字符串或词元的初始集合开始,迭代地删除其中的…

WPF+MVVM案例实战(四)- 自定义GroupBox边框样式实现

文章目录 1、项目准备2、功能实现1、EnviromentModel.cs 代码2、GroubBoxViewModel.cs 代码实现3、ViewModelLocator.cs 依赖注入4、GroubBoxWindow.xaml 样式布局5、数据绑定 3、效果展示4、资源获取 1、项目准备 打开项目 Wpf_Examples,新建 GroubBoxWindow.xaml…