深度学习-张量的基本类型、数值计算、索引操作、形状操作

news2024/11/13 8:01:45

张量

张量(Tensor)是深度学习和PyTorch中的核心概念之一,是标量、向量、矩阵在高维空间中的推广。在PyTorch中,张量用于表示和操作数据。以下是张量的基本类型、创建方法、类型转换、数值计算、索引操作、形状操作以及自动微分模块的详细介绍。

基本类型
  • 0维张量:标量(scalar)

    scalar = torch.tensor(7)
  • 1维张量:向量(vector)

    vector = torch.tensor([7, 7])
  • 2维张量:矩阵(matrix)

    MATRIX = torch.tensor([[7, 8], [9, 10]])
  • 多维张量

    TENSOR = torch.tensor([[[1, 2, 3], [3, 6, 9], [2, 4, 5]]]) 
张量创建
  • 根据指定数据创建张量

    data = torch.tensor(10)
    data = np.random.randn(2, 3)
    data = torch.tensor(data)
    data = [[10., 20., 30.], [40., 50., 60.]]
    data = torch.tensor(data)
  • 根据形状创建张量

    
    	data = torch.Tensor(2, 3)
    
    	data = torch.Tensor([10])
    
    	data = torch.Tensor([10, 20])

    注意:如果传递列表,则创建包含指定元素的张量。

  • 创建指定类型的张量

    data = torch.ShortTensor() # int16
    data = torch.IntTensor() # int32
    data = torch.LongTensor() # int64
    data = torch.FloatTensor() # float32
    data = torch.DoubleTensor() # float64
  • 创建线性和随机张量

    # 线性张量
    data = torch.arange(start, end, step)
    data = torch.linspace(start, end, steps)
    
    
    # 随机张量
    data = torch.randn(n, m)
  • 设置随机种子

    torch.random.manual_seed(n)
  • 创建0、1或指定值

    data = torch.zeros(n, m)
    data = torch.ones(n, m)
    data = torch.full([n, m], 值)
张量元素类型转换
  • 使用.type()或简写方法
    data = data.type(torch.ShortTensor) # int16
    data = data.type(torch.IntTensor) # int32
    data = data.type(torch.LongTensor) # int64
    data = data.type(torch.FloatTensor) # float32
    data = data.type(torch.DoubleTensor) # float64
    
    
    data = data.short() # int16
    data = data.int() # int32
    data = data.long() # int64
    data = data.float() # float32
    data = data.double() # float64
张量类型转换
  • 张量转换为NumPy数组

    data_n = data_t.numpy()
    data_n = data_t.numpy().copy() # 避免共享内存
  • NumPy数组转换为张量

    data_t = torch.from_numpy(data_n)
    data_t = torch.from_numpy(data_n.copy()) # 避免共享内存
    data_t = torch.tensor(data_n) # 默认不共享内存
  • 使用item()函数提取标量元素

    value = T对象.item()
张量数值计算
  • 基本运算

    # 加、减、乘、除、取负号
    data = torch.add(data1, data2)
    data = torch.sub(data1, data2)
    data = torch.mul(data1, data2)
    data = torch.div(data1, data2)
    data = torch.neg(data)
    
    
    # 就地操作(带下划线的版本)
    data1.add_(data2)
  • 点乘运算

    data = torch.mul(data1, data2)
    data = data1 * data2
  • 矩阵乘法运算

    data = data1 @ data2
    data = torch.matmul(data1, data2)
张量运算函数
  • 平均值

    mean_value = T对象.mean(dim=0) # 按列计算
    mean_value = T对象.mean(dim=1) # 按行计算
  • 总和

    sum_value = T对象.sum(dim=0)
    sum_value = T对象.sum(dim=1)
  • 平方根、幂次方、指数和对数

    sqrt_value = T对象.sqrt()
    pow_value = T对象.pow(n)
    exp_value = T对象.exp()
    log_value = T对象.log()
    log2_value = T对象.log2()
    log10_value = T对象.log10()
张量索引操作
  • 简单操作

    row_data = T对象[行]
    col_data = T对象[:, 列]
  • 列表索引

    data = T对象[[0, 1], [2, 3]]
    data = T对象[[[0], [1]], [1, 2]]
  • 范围索引

    data = T对象[起始:结束:步长, 起始:结束:步长]
    data = T对象[[[0],[2]],[0,1]]
    data = T对象[0:3:2, :2]
  • 布尔索引

    data = T对象[:, T对象[2] > 5]
  • 多维索引

    data = T对象[0, :, :]
    data = T对象[:, 0, :]
    data = T对象[:, :, 0]
    data = T对象[:, 1:3, 2]
张量形状操作
  • 获取张量形状

    shape = T对象.shape
    shape = T对象.size()
  • 修改形状

    data = data.reshape(n, m)
    data = data.view(n, m) # 仅用于整块内存中的张量
  • 内存问题

    is_contiguous = T对象.is_contiguous()
    contiguous_data = T对象.contiguous()
  • 改变维度

    data = data.reshape(新形状)
  • 堆叠

    new_T = torch.stack([T1, T2, T3], dim=0)
  • 升维和降维

    data = torch.unsqueeze(data, dim=n)
    data = torch.squeeze(data, dim=n)
  • 维度交换

    data = T对象.permute(dims)
    data = torch.transpose(data, dim1, dim2)
张量拼接操作
  • 拼接
    data = torch.cat([data1, data2], dim=n)
张量自动微分模块
  • 反向传播

    data.backward()
  • 获取梯度

    grad_value = data.grad

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于SpringBoot和Vue的公司文档管理系统设计与开发(源码+定制+开发)

博主介绍: ✌我是阿龙,一名专注于Java技术领域的程序员,全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师,我在计算机毕业设计开发方面积累了丰富的经验。同时,我也是掘金、华为云、阿里云、InfoQ等平台…

如何保证kafka生产者数据可靠性

ack参数的设置: 0:生产者发送过来的数据,不需要等数据落盘应答 假如发送了Hello 和 World两个信息,Leader直接挂掉,数据就会丢失 生产者 ---> Kafka集群 一放进去就跑 数据可靠性分析:丢数 1&#…

python画图|text()和dict()初探

【1】引言 在进行hist()函数的学习进程中,了解到了subplot_mosaic()函数,在学习subplot_mosaic()函数的时候,又发现了text()和dict()函数。 经探究,text()和dict()函数有很多一起使用的场景,为此,我们就一…

网线类别线芯含义和传输距离以及水晶头制作标准

网线八芯每根的含义: 网线的八根线芯,也被称为RJ45网线中的8芯,网线采用8根线芯,这八根线芯各自承担着特定的功能。这8根线芯被分为4对,每对以特定的方式绞合在一起,8芯网线主要是为了减少电磁信号的相互干…

每天五分钟深度学习PyTorch:基于全连接神经网络完成手写字体识别

本文重点 上一节我们学习了搭建普通的全连接神经网络,我们现在用它来解决一个实际问题,我们用它跑一下手写字体识别的数据,然后看看它的效果如何。 网络模型 class ThreeNet(nn.Module) : def __init__ (self,in_dim,n_hidden_1,n_hidden_2,out_dim): super(ThreeNet, self…

【R78/G15 开发板测评】串口打印 DHT11 温湿度传感器、DS18B20 温度传感器数据,LabVIEW 上位机绘制演化曲线

【R78/G15 开发板测评】串口打印 DHT11 温湿度传感器、DS18B20 温度传感器数据,LabVIEW 上位机绘制演化曲线 主要介绍了 R78/G15 开发板基于 Arduino IDE 环境串口打印温湿度传感器 DHT11 和温度传感器 DS18B20 传感器的数据,并通过LabVIEW上位机绘制演…

基于MFC实现的赛车游戏

一、问题描述 游戏背景为一环形车道图,选择菜单选项“开始游戏”则可开始游戏。游戏的任务是使用键盘上的方向键操纵赛道上的蓝色赛车追赶红色赛车,红色赛车沿车道顺时针行驶,出发点和终点均位于车道左上方。任一赛车先达到终点则比赛结束。…

实验三 JDBC数据库操作编程(设计性)

实验三 JDBC数据库操作编程(设计性) 实验目的 掌握JDBC的数据库编程方法。掌握采用JDBC完成数据库链接、增删改查,以及操作封装的综合应用。实验要求 本实验要求每个同学单独完成;调试程序要记录调试过程中出现的问题及解决办法…

Java期末复习暨学校第二次上机课作业

Java期末复习暨学校第二次上机课作业:了解程序的控制结构,掌握顺序结构程序的设计方法,掌握分支程序设计方法。 第一题: 闰年有两种判断方式: (1):能被4整除但不能被100整除 &…

Windows配置NTP时间同步

Windows下实现NTP时间同步 1、Windows时间服务(W32Time)2、Windows 时间同步的工作原理3、配置和管理 Windows 时间同步3.1 命令行工具:w32tm3.2 控制面板中的设置 4. 高级设置(Windows Server 环境)5.调整时间同步的间隔5.1 通过组策略调整时…

Go八股(Ⅳ)***slice,string,defer***

***slice,string,defer*** 1.slice和arry的区别 arry: Go语言中arry即为数据的一种集合,需要在声明时指定容量和初值,且一旦声明就长度固定,访问时按照索引访问。通过内置函数len可以获取数组中的元素个…

STM32H503开发(2)----STM32CubeProgrammer烧录

STM32H503开发----2.STM32CubeProgrammer烧录 概述硬件准备视频教学样品申请源码下载参考程序自举模式BOOT0设置UART烧录USB烧录 概述 STM32CubeProgrammer (STM32CubeProg) 是一款用于编程STM32产品的全功能多操作系统软件工具。 它提供了一个易用高效的环境,通过…

ubuntu下aarch64-linux-gnu(交叉编译) gdb/gdbserver(二)

ubuntu下aarch64-linux-gnu(交叉编译) gdb/gdbserver(二) 本教程作为gdb/gdbserver编译安装教程的一个补充,教会大家如何使用gdb/gdbserver进行远程调试。 如上图所示,我们需要将编译后的gdbserver上传至目标设备,其上…

架构零散知识点

1 数据库 1.1 数据库范式 有一个学生表,主键是学号,含有学生号、学生名、班级、班级名,违反了数据库第几范式? --非主属性不依赖于主键,不满足第二范式 有一个订单表,包含以下字段:订单ID&…

【时间之外】IT人求职和创业应知【31】

目录 新闻一:2024年“秦创原沣东杯”陕西省科技工作者创新创业大赛颁奖仪式暨沣东新城机器人产业发展大会盛大启幕 新闻二:声网CEO赵斌:RTE将成为生成式AI时代AI Infra的关键部分 新闻三:“5G工业互联网”融合应用试点城市名单…

移动开发(七):.NET MAUI使用RESTAPI实现查询天气笔记

目录 一、接口准备 二、实体部分 三、页面部分 四、后台代码逻辑 五、总结 在移动开发过程中,第三方对接是非常常见的。今天给大家分享.NET MAUI如何使用REST API实现输入城市名称查询天气的示例,希望对大家学习.NET MAUI可以提供一些帮助! 一、接口准备 首先我们需要…

Javascript中如何实现函数缓存?函数缓存有哪些应用场景?

#一、是什么 函数缓存,就是将函数运算过的结果进行缓存 本质上就是用空间(缓存存储)换时间(计算过程) 常用于缓存数据计算结果和缓存对象 解释 const add (a,b) > ab; const calc memoize(add); // 函数缓存…

【网络安全 | 并发问题】Nginx重试机制与幂等性问题分析

未经许可,不得转载。 文章目录 业务背景Nginx的错误重试机制proxy_next_upstream指令配置重试500状态码非幂等请求的重试问题幂等性和非幂等性请求non_idempotent选项的使用解决方案业务背景 在现代互联网应用中,高可用性(HA)是确保系统稳定性的关键要求之一。为了应对服务…

利用游戏引擎的优势

大家好,我是小蜗牛。 在当今快速发展的游戏产业中,选择合适的游戏引擎对开发者来说至关重要。Cocos Creator作为一款功能强大且灵活的游戏引擎,为开发者提供了丰富的工具和资源,使他们能够高效地开发出优秀的游戏。本文将探讨如何…

财务源码 财务软件 SaaS 云财务

🔍 专业财务源码,助您快速开展财务管理!📈 🎯 我们提供一系列高质量、可定制、易于使用的财务源码,帮助您快速搭建强大的财务管理系统。无论是小型企业、中型企业,还是个人用户,我们…