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

计算机视觉(CV)——pytorch张量基本使用

1. 张量的创建方式

import torch
# 1.通过列表创建张量
t = torch.tensor([1, 2])# 2.通过元组创建张量
torch.tensor((1, 2))# 3.通过array创建张量
import numpy as np
x = np.array((1, 2))
torch.tensor(x)

2. 张量的类型

t.dtype 
# 张量默认创建长整形int64
torch.tensor(np.array([1.1, 1.2])).dtype
# 输出为float64
torch.tensor([1.1, 1.2]).dtype
# 输出为float32
## 创建浮点型数组时,张量默认创建32位,而array默认为64位置

在这里插入图片描述

2.1 创建指定类型的张量
torch.tensor([1, 2], dtype=torch.int16)
2.2 创建复数
# 1是实部,2j是虚部
x = torch.tensor(1 + 2j)

3. 张量的维度及形变

3.1 查看张量维度
# 创建1维张量
t = torch.tensor([1, 2])# 查看张量维度
t.ndim
t.shape
t.size()
3.2 0维张量
# 虽然只包含一个元素,但又不是单独的一个数
# t1是一个0维张量,而t2是一个1维张量
t1 = torch.tensor(1)
t2 = torch.tensor([1])
3.3 张量的解读方法
import numpy as np
a1 = np.array([[1, 2, 2], [1, 3, 3]])
a2 = np.array([[1, 2, 3], [4, 5, 6]])# 创建一个高维数组
t3 = torch.tensor([a1, a2])
"""
tensor([[[1, 2, 2],[1, 3, 3]],[[1, 2, 3],[4, 5, 6]]])
"""# 输出其形状
t3.shape
"""torch.Size([2, 2, 3])
"""
# 第一个2可以理解为张量t3包含两个子元素,(2, 3)可以理解为这两个子元素是二维的,且形状为2x3
3.4 拉平张量
# 将多维的张量准换为1xn的张量
t4 = t3.flatten()
6. 使用reshape进行任意变化
使用reshape时,若调用为 t.reshape(x, y, z,...),则 t.shape 得到的值即为(x, y, z,...)

4. 张量的索引、切片

4.1 张量的符号索引
import torch
import numpy as np
# 1.一维张量索引,基本格式遵循[start : end : step]
t1 = torch.arange(1, 11)
# tensor([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
# 这样获取的是一个0维张量,不是单独的数,要转换为数字需使用item()方法
t1[0]
# tensor(1)
t1[1: 8] #左闭右开
# tensor([2, 3, 4, 5, 6, 7, 8])
t1[1: : 2]
# tensor([2, 4, 6, 8, 10])
t1[: 8 : 2]
# tensor([1, 3, 5, 7])
4.2 张量的函数索引
# 使用index_select(),通过指定index来对张量进行索引
indices = torch.tensor([1, 2])
x = torch.index_select(t1, 0, indices)
# 第二个参数代表索引的维度,由于t1只有一个维度,故而取值为0,表示在第一个维度上进行索引

在这里插入图片描述

4.3 tensor.view()

此方法会返回一个类似视图的结果,该结果和原张量对象共享一块数据存储空间,并且通过.view()方法,还可以改变对象结构,生成一个不同结构,但共享一个存储空间的张量。当然,共享一个存储空间,也就代表二者是”浅拷贝”的关系,修改其中一个,另一个也会同步进行更改。
在这里插入图片描述

4.4 chunk分块

在这里插入图片描述
当原张量不能均分时,chunk不会报错,会返回其他均分结果

4.5 split拆分函数

在这里插入图片描述
split所得对象也是一个视图

5. 张量的合并操作

张量的合并操作与列表的追加元素类似,可以拼接、堆叠

5.1 拼接函数cat

1.1 先初始化3个张量
在这里插入图片描述
1.2 分别按照行列进行拼接
在这里插入图片描述
1.3 拼接维度不一致将会出错
在这里插入图片描述

5.2 堆叠函数stack

在这里插入图片描述

注:堆叠要求张量的形状完全一致,要求比cat更高

5. 张量广播

广播特性允许允许不同形状的张量之间进行计算。

  1. 相同形状的张量计算本质也用到了广播特性。
  2. 不同形状的张量计算。
  • 标量和任意形状的张量都可以运算。
  • 不同形状的张量。
    • 若二者在两个分量均不相同,但都有分量为1的情况,则可以广播;
    • 若二者在两个分量中仅有一个不同,且不同的分量中有一个为1,则可以广播。
http://www.xdnf.cn/news/17567.html

相关文章:

  • 青龙峡拔韭菜
  • 【东枫科技】NTN-IOT 卫星互联网原型系统,高达1.6G大带宽
  • 免费数字人API开发方案
  • 使用正则表达式检测Base64字符串并提取图片类型及正文的JavaScript函数,代码精简且高效
  • How Websites Work 网站如何运作
  • Linux入门指南:26个基础命令全解析
  • C语言(长期更新)第10讲:操作符详解(二)
  • vue3项目中在一个组件中点击了该组件中的一个按钮,那么如何去触发另一个组件中的事件?
  • playwright-mcp 项目全解析:从理论到实践
  • 量子计算机实用化:从理论到现实的艰难跨越
  • (一)Tailwindcss
  • Win10清理C盘步骤
  • Spring事务失效的常见原因
  • ROS2 QT 多线程功能包设计
  • 基于PyTorch一文讲清楚损失函数与激活函数并配上详细的图文讲解
  • redis集群-docker环境
  • 咪咕MGV3200-KLH_GK6323V100C_板号E503744_安卓9_短接强刷包-可救砖
  • 大数据架构演变之路
  • java的三种组件漏洞靶场攻略
  • LeetCode 组合总数
  • 人工智能系列(8)如何实现无监督学习聚类(使用竞争学习)?
  • 1. 电阻选型
  • 计算机网络:如何理解目的网络不再是一个完整的分类网络
  • mpv core_thread pipeline
  • jmeter常规压测【读取csv文件】
  • 北京JAVA基础面试30天打卡06
  • Vulhub靶场组件漏洞(XStream,fastjson,Jackson)
  • 北京天津廊坊唐山打捞失物日记
  • 双非二本如何找工作?
  • jxWebUI--按钮