3-2 Named tensors

news2024/11/25 0:37:56

这里有一张图像img_t
彩色图像可以看作一个矩阵,只是矩阵中的每一个点不是一个值,而是包含3个值的数组,这3个值就是RGB值

我们给它随机化为一个形状为 [3, 5, 5] 的三维张量img_t

img_t = torch.randn(3, 5, 5) # shape [channels, rows, columns]

RGB(Red, Green, Blue)图像是一种彩色图像表示方式,其中图像的颜色信息由红、绿、蓝三个颜色通道构成。每个像素点都由红色通道(R)、绿色通道(G)和蓝色通道(B)的亮度值组成,这三个通道的亮度值可以取从 0 到 255 的整数值。

在 RGB 图像中,通过调整不同通道的亮度值和组合方式,可以呈现出丰富的颜色和色彩变化。例如,纯红色的像素点在红色通道的亮度值最大(255),而绿色通道和蓝色通道的亮度值为 0,从而呈现出纯红色。

在这里插入图片描述

在这里插入图片描述

我们希望将其转换为灰度图像,假设转换所需权重值:

weights = torch.tensor([0.2126, 0.7152, 0.0722])

在这里插入图片描述

这里包含了将 RGB 图像转换为灰度图像时使用的权重值,红色通道的权重为 0.2126,绿色通道的权重为 0.7152,蓝色通道的权重为 0.0722。在实际应用中,可以根据具体需求和应用场景进行调整。不同的权重值可能会产生不同的灰度图像效果,适用于不同的视觉感知或图像处理任务。

灰度图像是一种仅包含灰度信息的图像,每个像素只有一个亮度值。灰度图像可以看作是对彩色图像进行灰度化处理得到的结果。灰度值通常在 0 到 255 的范围内表示像素的亮度,其中 0 表示黑色(最暗),255 表示白色(最亮),中间的值表示不同灰度级别。在灰度图像中,每个像素只有一个通道,通常用于表示图像中的亮度、灰度或强度信息。相比于 RGB 图像,灰度图像更加简化,更适合于某些应用场景,例如图像处理算法的前处理步骤、黑白摄影等。

将 RGB 图像转换为灰度图像时,常常使用加权求和的方式

img_gray = torch.sum(img_t * weights[:, None, None], dim=0)

weights[:, None, None] 的操作是为了将 weights 张量的形状从 [3] 扩展为 [3, 1, 1],以便与 img_t 进行相乘

在这里插入图片描述
在这里插入图片描述
使用 torch.sum 函数在第 0 维度上对加权的张量进行求和,得到一个形状为 [5, 5] 的灰度图像张量 img_gray,其中每个像素的值是通过加权求和计算得到的

在这里插入图片描述

反之,从表示为具有高度和宽度维度的二维张量的灰度图像到添加第三个通道维度的彩色图像(如RGB),或者从单个图像到一批图像。

例如,我们在batch_t中引入了一个额外的批处理维度
第一个维度 2 表示批量大小,表示批量中包含 2 张图像。
第二个维度 3 表示通道数,通常对应于彩色图像的 RGB 通道(红色、绿色、蓝色)。
第三个维度 5 表示每个图像的行数或高度。
第四个维度 5 表示每个图像的列数或宽度。

batch_t = torch.randn(2, 3, 5, 5) # shape [batch, channels, rows, columns]

有时RGB通道在0维,有时在1维,但它总是在-3维(从最后开始的第三维)

可以使用以下方式表示简单的未加权均值:
这行代码计算了在维度 -3 上的平均值,即 RGB 通道的平均值。结果是一个形状为 [5, 5] 的张量,表示转换后的灰度图像。

img_gray_naive = img_t.mean(-3)

在这里插入图片描述

对于 batch_t,我们得到一个形状为 [2, 5, 5] 的张量

在这里插入图片描述

现在加上权重
我们先处理weights的维度,进行了两次 unsqueeze 操作,将其形状从 (3,) 扩展为 (3, 1, 1)。这样做是为了与形状为 (2, 3, 5, 5) 的 batch_t 张量进行乘法运算

unsqueezed_weights = weights.unsqueeze(-1).unsqueeze_(-1)

img_t 和 batch_t 分别与 unsqueezed_weights 进行逐元素相乘,得到 img_weights 和 batch_weights。这两个张量的形状都是 (2, 3, 5, 5)

img_weights = (img_t * unsqueezed_weights)
batch_weights = (batch_t * unsqueezed_weights)

我们通过在倒数第三个维度上求和来计算加权后的灰度图像,得到的形状分别是(5, 5)和(2,5,5)

img_gray_weighted = img_weights.sum(-3)
batch_gray_weighted = batch_weights.sum(-3)

PyTorch 1.3添加了命名张量作为实验特性。
UserWarning: Named tensors and all their associated APIs are an experimental feature and subject to change. Please do not use them for anything important until they are released as stable.

I think you can ignore it for now and either install the nightly release or wait for the next stable release as the issue was tracked and fixed here.

Attention:Given the experimental nature of this feature at the time of writing, and to avoid mucking around with indexing and alignment, we will stick to unnamed in the remainder.

张量工厂函数,如张量和rand,有一个名称参数。名称应该是一个字符串序列:

weights_named = torch.tensor([0.2126, 0.7152, 0.0722], names=['channels'])

当我们已经有一个张量并想要添加名称(但不改变现有的名称)时,我们可以对其调用refine_names方法

img_named = img_t.refine_names(..., 'channels', 'rows', 'columns')
batch_named = batch_t.refine_names(..., 'channels', 'rows', 'columns')

省略号(…)允许省略任意数量的维度。使用rename兄弟方法,你也可以覆盖或删除(通过传入None)现有的名字

在这里插入图片描述
在这里插入图片描述


在这里插入图片描述

在这里插入图片描述

显示对其维度
align_as方法返回一个张量,其中添加了缺失维数,并将现有维按正确顺序排列:

weights_aligned = weights_named.align_as(img_named)

在这里插入图片描述

接受维度参数的函数,如sum,也接受命名维度

gray_named = (img_named * weights_aligned).sum('channels')

在这里插入图片描述

注意区分乘法和sum

在这里插入图片描述
在这里插入图片描述
我们可以通过重命名为None来删除它们的名称

gray_plain = gray_named.rename(None)

在这里插入图片描述

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

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

相关文章

数据库是如何工作的

数据库是如何工作的 注: 本文翻译自db_tutorial. 数据库计算机世界的一个基础软件,要想深入了解数据库,就不得不思考如下几个问题: 数据以什么格式保存?(在内存和磁盘上)它何时从内存移动到磁…

永磁同步电机的矢量控制PMSM仿真(matlab仿真与图像处理系列第一期)

永磁同步电机(Permanent Magnet Synchronous Motor, PMSM) PMSM具有高效率、高功率密度和快速响应等特点,在现代工业中得到了广泛应用。而矢量控制是一种广泛应用于永磁同步电机的高精度控制方法,它能够实现永磁同步电机的快速、准确、稳定的运行。 矢量控制 矢量控制的…

Android自定义View合集

文章目录 自定义QQ步数QQ计步效果分析自定义View分析的常用步骤自定义属性获取自定义属性画外圆弧画内圆画文字增加动画让其动起来 自定义评分控件RatingBar自定义评分View效果分析自定义属性获取自定义属性重写onMeasure()方法画出对应数量的星星触摸事件处理 自定义酷狗侧滑菜…

Ubuntu设置无线wifi的静态IP

安装 net-tools sudo apt install net-tools 输入ifconfig查看当前网络ip地址&#xff1a; pulsarpulsar:~$ ifconfig docker0: flags4099<UP,BROADCAST,MULTICAST> mtu 1500inet 172.17.0.1 netmask 255.255.0.0 broadcast 172.17.255.255ether 02:42:02:8c:87:a…

Linux下使用Mysql数据库忘记密码问题解决

​ 方法1查看初始化密码进行登录&#xff1a; 查看mysql的初始密码 在rootlocalhost后面的就是mysql初始的密码&#xff0c;以上图为例 初始密码则为&#xff1a;ukehBfivW1 方法2直接跳过数据库密码验证&#xff1a; 1、用vi指令进入mysql配置文件/etc/my.cnf并修改 在最后…

jmeter的web接口测试

目录 前言&#xff1a; 一、安装Jmeter 二、添加HTTP接口测试 三、添加新的POST请求 四、添加断言 前言&#xff1a; 使用JMeter进行Web接口测试是一种常见的应用场景。 一、安装Jmeter 二、添加HTTP接口测试 我们的所以工具都会在Jmeter工具中完成&#xff0c;接来就…

python爬虫之Scrapy框架--测试调试--保存数据

目录 ScrapyShell 启动ScrapyShell 基本方法 注意 保存数据到文件 方法一 使用python原生方式保存 方法二 使用Scrapy内置方式 方法三 Item Pipeline的使用 功能 ScrapyShell ScrapyShell是Scrapy框架提供的一个交互式的开发工具&#xff0c;用于调试和测试爬虫&…

数学建模-数据的处理

MATLAB数学建模方法与实践&#xff08;第3版&#xff09;——读书笔记 数据的准备数据获取数据处理缺失值处理噪音过滤数据集成数据归约数据变换标准化离散化 数据统计基本描述性统计分布描述性统计 数据可视化数据降维主成分分析&#xff08;PCA&#xff09;相关系数降维 数据…

K8S 使用(1)- 基本命令

根据上文完成部署k8s后&#xff0c;我们需要了解如何使用k8s.首先我们需要了解如何使用K8S的一些基础命令及主要概念。 尚不清楚如何部署的请参考&#xff1a;单master部署简要步骤 如果您熟悉了k8s基本命令&#xff0c;可以跳过此章节。 目录 先看一下这张图 2. 节点 nod…

2.2、IOC容器的实现流程

​一、类图 二、容器的实现接口 Spring容器并不是只有一个。Spring自带多个容器实现&#xff0c;可以归位两种不同的类型。 &#xff08;1&#xff09;Bean工厂&#xff08;由org.springframework.beans.factory.BeanFactory接口定义&#xff09;是简单的容器实现工厂&#x…

数学内容的概述

前言 作为一名文科生&#xff0c;学习编程最大的阻碍莫过于数学知识。 学习数学的必要性 跟开发APP和后台服务器相比&#xff0c;机器学习、深度学习需要大量的数学知识。 数据处理和清洗&#xff1a;数据分析涉及大量的数据处理和清洗工作&#xff0c;需要掌握基本的数学概…

linux系统LAMP架构

文章目录 一、LAMP简介与概述二、LAMP各组件主要作用1.构建LAMP平台顺序 三、编译安装Apache httpd服务1.将所需软件安装包下载到/opt目录下解压2.移动两个文件并改名3.安装依赖环境4.编译安装5.做软连接&#xff0c;使文件可执行6.优化配置文件路径&#xff0c;并把httpd服务的…

《面试1v1》Redis主从架构

&#x1f345; 作者简介&#xff1a;王哥&#xff0c;CSDN2022博客总榜Top100&#x1f3c6;、博客专家&#x1f4aa; &#x1f345; 技术交流&#xff1a;定期更新Java硬核干货&#xff0c;不定期送书活动 &#x1f345; 王哥多年工作总结&#xff1a;Java学习路线总结&#xf…

crossover虚拟机软件好用吗?22.1.1版本有哪些优点

苹果系统虽然安全稳定&#xff0c;但有些应用程序并不提供苹果系统的安装包&#xff0c;使用双系统或在苹果电脑安装虚拟机可以帮我们提升设备使用效率&#xff0c;除了这两种解决方案外&#xff0c;还可以使用类虚拟机软件crossover&#xff0c;crossover mac的优点在于不会占…

使用HTTP/2实现服务端主动推送消息给客户端

77. 使用HTTP/2实现服务端主动推送消息给客户端 HTTP/2协议的服务器主动推送机制是通过服务器在接收到客户端请求后&#xff0c;主动向客户端推送相关资源的方式来实现的。下面将详细解释如何在服务器端和客户端实现HTTP/2的服务器主动推送&#xff0c;并给出相应的代码示例。…

华为OD机试真题(Java),素数伴侣(100%通过+复盘思路)

一、题目描述 若两个正整数的和为素数&#xff0c;则这两个正整数称之为“素数伴侣”&#xff0c;如2和5、6和13&#xff0c;它们能应用于通信加密。现在密码学会请你设计一个程序&#xff0c;从已有的 N &#xff08; N 为偶数&#xff09;个正整数中挑选出若干对组成“素数伴…

老鸟是这样实现springboot日志打印的~

文章目录 前言一、实现一个全局日志打印二、使用步骤1. 新增一个自定义注解2. 拦截注解,并实现相应的打印日志功能3. 使用 总结 前言 项目中有时候为了与前端,与后端(微服务/远程调用http) 等撕逼,我们不得不做好应对措施,最终的就是打印清晰我们的入参出参日志,这为以后撕逼,…

Nik Silver Efex 黑白胶片效果滤镜

Nik Silver Efex 为获得优质黑白效果而精心设计算法&#xff0c;是世界领先级的黑白胶片滤镜集。 内置 64 个黑白&#xff08;包括单色、双色等&#xff09;预设供选择&#xff0c;主要分为经典 Classic、现代 Modern、复古 Vintage、阿弗格 En Vogue等四大风格&#xff0c;另外…

银行数字化转型导师坚鹏:兴业银行《天才与算法》读书拆解培训

兴业银行杭州分行《天才与算法》读书拆解培训圆满结束 兴业银行股份有限公司&#xff08;简称“兴业银行”&#xff09;成立于1988年8月&#xff0c;2022年总资产9.27万亿元&#xff0c;是经国务院、中国人民银行批准成立的首批股份制商业银行之一&#xff0c;总行设在福州市。…

【MySQL 高级(进阶)SQL 语句】

目录 一、命令操作1、select ----显示表格中一个或数个字段的所有数据记录2、select 指定字段的显示顺序3、select distinct 不显示重复的数据记录4、where 有条件的查询5、and和or 命令 ---- 且和或6、in 显示已知的值的数据记录7、between 显示两个值范围内的数据记录8、通配…