机器学习笔记:逆置换

1 介绍

  • 给定一个排列 p,它的逆置换(inverse permutation)是一个排列 invp,满足 invp[p[i]] = ip[invp[i]] = i 对所有 i 成立。

2 python实现

'''
计算一个排列的逆排列给定一个排列 p,它的逆排列是一个排列 invp,满足 invp[p[i]] = i 和 p[invp[i]] = i 对所有 i 成立
'''
def invpermute(p):"""inverse permutation"""p = np.asarray(p)invp = np.empty_like(p)for i in range(p.size):invp[p[i]] = i#对于每个 i,设置 invp 在 p[i] 的位置上的值为 ireturn invp

3 举例

p = [2, 0, 1]
invp = invpermute(p)
invp
#[1, 2, 0]
  • invp的第p[0]个位置(第2个位置)值为0
  • invp的第p[1]个位置(第0个位置)值为1
  • invp的第p[2]个位置(第1个位置)值为2

反之亦可

  • p的第invp[0]个位置(第1个位置)值为0
  • p的第invp[1]个位置(第2个位置)值为1
  • p的第invp[2]个位置(第0个位置)值为2

4 部分应用

4.1 RNN

  • 在处理变长序列数据,特别是当我们使用循环神经网络(RNN)时,建议对序列按长度排序
    • RNN处理变长序列时,尽管每个序列的实际长度可能不同,但在单次批处理中,我们需要所有的序列都有相同的长度。为了实现这一点,我们通常会对短的序列进行填充,使其长度与批处理中最长的序列相同。
    • 当我们对序列按长度排序时,那些长度相近的序列会被分到同一个批处理中。这意味着我们不需要为很短的序列填充过多的无效数据。

4.1.1 举例

假设我们有如下序列:

seqs = ["apple", "banana", "cherry", "date", "fig"]

他们的长度分别为:

lengths = [5, 6, 6, 4, 3]

 为了高效地进行批处理,对这些序列按长度进行排序:

sorted_seqs = ["fig", "date", "apple", "banana", "cherry"]

这时,我们需要一个排列索引(按照长度排序后的索引结果)来跟踪这个排序操作:

idx = [4, 3, 0, 1, 2]
#排序后的第0个元素是原来的第4个元素,以此类推

在RNN处理后,我们得到的输出也是按这个顺序排序的。为了将输出恢复到与原始输入相同的顺序,我们需要使用逆排列:

invp = [2, 3, 4, 1, 0]
'''
invp的计算:
invp的第idx[0](4)个元素是0
invp的第idx[1](3)个元素是1
。。。
'''

使用这个逆排列,我们可以将输出重新排序,使其与原始输入的顺序相匹配。

比如RNN之后,得到的输出序列是

outputs = ["output_fig", "output_date", "output_apple", "output_banana", "output_cherry"]

那么 使用逆排列,我们可以将输出重新排序到原始输入的顺序:

original_order_outputs = [outputs[i] for i in invp]
# 返回:['output_apple', 'output_banana', 'output_cherry', 'output_date', 'output_fig']

这样,original_order_outputs 就和 seqs 的顺序一致了。

所以,通过使用逆置换,我们可以确保无论输入序列如何被排序或重排,我们总是可以使用逆置换来恢复原始的顺序。这在处理与序列关联的目标或标签时非常有用,因为我们需要确保输入和标签的顺序始终保持一致。

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

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

相关文章

PyTorch中的intrusive_ptr

PyTorch中的intrusive_ptr 前言 intrusive_ptr與unique_ptr,shared_ptr等一樣,都是smart pointer。但是intrusive_ptr比較特別,它所指向的物件類型必須繼承自intrusive_ptr_target,而intrusive_ptr_target必須實現引用計數相關的…

OpenCV 相机相关函数

一、变换参数矩阵的求解 1. 计算三个二维点对之间的仿射变换矩阵:getAffineTransform() 2. 计算多个二维点对之间的最优放射变换矩阵(误差最小准则):estimateRigidTransform();或者findHomography(); 3. 计算四个二维点对之间的…

软考 系统架构设计师系列知识点之设计模式(7)

接前一篇文章:软考 系统架构设计师系列知识点之设计模式(6) 所属章节: 老版(第一版)教材 第7章. 设计模式 第2节. 设计模式实例 相关试题 3. 某公司欲开发一套窗体图形界面类库。该类库需要包含若干预定…

针对多分类问题,使用深度学习--Keras进行微调提升性能

前面的文章对二分类问题用Keras进行了Fine-tune,使得模型的准确率进一步提升,此处对于多分类问题,尝试使用Fine-tune来提升性能。 1. 准备数据集 为了演示,本次选用了博文keras系列︱图像多分类训练与利用bottleneck features进行微调(三)中提到的数据集,原始的数据集…

专业135总分400+西安交通大学信息与通信工程学院909/815考研经验分享

今年初试发挥不错,400,专业课135,将近一年复习一路走来,感慨很多,希望以下经历可以给后来的同学提供一些参考。 初试备考经验 公共课:三门公共课,政治,英语,数学。在备考…

如何进行内存对齐和内存访问优化?

内存对齐和内存访问优化是C语言编程中的重要主题,对于提高程序性能和可移植性非常关键。在本文中,我们将深入探讨内存对齐和内存访问优化的概念、原理和实际应用。 什么是内存对齐? 内存对齐是一种指定数据在内存中存储位置的规则&#xff…

轮转数组(Java)

大家好我是苏麟 , 这篇文章是凑数的 ... 轮转数组 描述 : 给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。 题目 : 牛客 NC110 旋转数组: 这里牛客给出了数组长度我们直接用就可以了 . LeetCode 189.轮转数组 : 189. 轮…

Nginx 的配置文件(负载均衡,反向代理)

Nginx可以配置代理多台服务器,当一台服务器宕机之后,仍能保持系统可用。 cmd查找端口是否使用:netstat -ano Nginx出现403 forbidden #解决办法:修改web目录的读写权限,或者是把nginx的启动用户改成目录的所属用户&…

田忌赛马(贪心算法)

分为两种情况: 1.田最快 快于 王最快(田最快面对任何都赢) ->故和王最快比,消耗王最快 2.田最快 小于等于 王最快(王最快面对任何都可赢) 则比最慢(意在找一匹无法赢任何马的马&#…

微信小程序控制元素显示隐藏

微信小程序是一种轻量级的应用程序,它可以在微信中运行,具有快速、便捷、易用等特点。在微信小程序中,我们可以通过控制元素的显示和隐藏来实现特定的功能。本文将介绍如何使用微信小程序控制元素的显示和隐藏,以及如何应用这些技…

20.1 OpenSSL 字符BASE64压缩算法

OpenSSL 是一种开源的加密库,提供了一组用于加密和解密数据、验证数字证书以及实现各种安全协议的函数和工具。它可以用于创建和管理公钥和私钥、数字证书和其他安全凭据,还支持SSL/TLS、SSH、S/MIME、PKCS等常见的加密协议和标准。 OpenSSL 的功能非常…

8类放球问题

放球问题简介 放球问题是一类很有意思的排列组合问题。通俗来说,就是把n个小球放到m个盒子里,问有几种放法。根据小球是否相同,盒子是否相同,是否允许有空盒,又可以把问题细分为8个具体的问题。其中有一些问题是非常简…

516 最长回文子序列(区间DP)(灵神笔记)

题目 最长回文子序列 给你一个字符串 s ,找出其中最长的回文子序列,并返回该序列的长度。 子序列定义为:不改变剩余字符顺序的情况下,删除某些字符或者不删除任何字符形成的一个序列。 示例 1: 输入:s …

shell实验

1.编写脚本for1.sh,使用for循环创建20账户,账户名前缀由用户从键盘输入,账户初始密码由用户输入,例如:test1、test2、test3、....、test10 编写脚本,使用read -p提醒用户从键盘输入账户名前缀以…

[论文笔记]GTE

引言 今天带来今年的一篇文本嵌入论文GTE, 中文题目是 多阶段对比学习的通用文本嵌入。 作者提出了GTE,一个使用对阶段对比学习的通用文本嵌入。使用对比学习在多个来源的混合数据集上训练了一个统一的文本嵌入模型,通过在无监督预训练阶段和有监督微调阶段显著增加训练数…

hdlbits系列verilog解答(移位寄存器)-23

文章目录 一、问题描述二、verilog源码三、仿真结果 一、问题描述 您将获得一个具有两个输入和一个输出的模块 my_dff (实现 D 触发器)。实例化其中的三个,然后将它们链接在一起以形成长度为 3 的移位寄存器。端口 clk 需要连接到所有实例。…

三篇论文:速览GPT在网络安全最新论文中的应用案例

GPT在网络安全领域的应用案例 写在最前面论文1:Chatgpt/CodeX引入会话式 APR 范例利用验证反馈LLM 的长期上下文窗口:更智能的反馈机制、更有效的信息合并策略、更复杂的模型结构、鼓励生成多样性和GPT类似的步骤:Conversational APR 对话式A…

Windows VS C++工程:包含目录、库目录、附加依赖项、附加包含目录、附加库目录配置与静态库、动态库的调用——以OCCI的配置为例

文章目录 1 包含目录(Include Directories)/ 附加包含目录(Additional Include Directories)1.1 区别和作用1.2 设置路径 2 库目录(Library Directories)/ 附加库目录(Additional Library Direc…

element ui el-table表格纵向横向滚动条去除并隐藏空白占位列

需求 当table内容列过多时,可通过height属性设置table高度以固定table高度、固定表头,使table内容可以滚动 现在需求是右侧滚动条不好看,需要去除滚动条,并隐藏滚动条所占列的位置 // ----------修改elementui表格的默认样式-…

Jquery 如何获取子元素。如何找到所有 HTML select 标签的选中项。jQuery 里的 ID 选择器和 class 选择器有何不同

可以使用 jQuery 的子选择器(Child Selector)或 find() 方法来获取子元素。 子选择器(Child Selector): 使用父元素的选择器和 > 符号来选取该父元素的子元素。 例如:选取 id 为 parent 的元素内所有 cl…