从打包序列中获取每个序列的最后一项

2024-04-20

我试图通过 GRU 放置打包和填充的序列,并检索每个序列最后一项的输出。当然我的意思不是-1项目,但实际上是最后一个、未填充的项目。我们预先知道序列的长度,因此应该很容易为每个序列提取length-1 item.

我尝试了以下方法

import torch
from torch.nn.utils.rnn import pack_padded_sequence, pad_packed_sequence

# Data
input = torch.Tensor([[[0., 0., 0.],
                       [1., 0., 1.],
                       [1., 1., 0.],
                       [1., 0., 1.],
                       [1., 0., 1.],
                       [1., 1., 0.]],

                      [[1., 1., 0.],
                       [0., 1., 0.],
                       [0., 0., 0.],
                       [0., 1., 0.],
                       [0., 0., 0.],
                       [0., 0., 0.]],

                      [[0., 0., 0.],
                       [1., 0., 0.],
                       [1., 1., 1.],
                       [0., 0., 0.],
                       [0., 0., 0.],
                       [0., 0., 0.]],

                      [[1., 1., 0.],
                       [0., 0., 0.],
                       [0., 0., 0.],
                       [0., 0., 0.],
                       [0., 0., 0.],
                       [0., 0., 0.]]])

lengths = [6, 4, 3, 1]
p = pack_padded_sequence(input, lengths, batch_first=True)

# Forward
gru = torch.nn.GRU(3, 12, batch_first=True)
packed_output, gru_h = gru(p)

# Unpack
output, input_sizes = pad_packed_sequence(packed_output, batch_first=True)

last_seq_idxs = torch.LongTensor([x-1 for x in input_sizes])

last_seq_items = torch.index_select(output, 1, last_seq_idxs) 

print(last_seq_items.size())
# torch.Size([4, 4, 12])

但形状不是我所期望的。我本来期望得到4x12, i.e. last item of each individual sequence x hidden.`

我可以循环遍历整个过程,并构建一个包含我需要的项目的新张量,但我希望有一种利用一些智能数学的内置方法。我担心手动循环和构建会导致性能非常差。


而不是最后两个操作last_seq_idxs and last_seq_items你可以这样做last_seq_items=output[torch.arange(4), input_sizes-1].

我不认为index_select正在做正确的事。它将选择您传递的索引处的整个批次,因此您的输出大小为 [4,4,12]。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从打包序列中获取每个序列的最后一项 的相关文章

随机推荐

  • Tensorflow 中的张量乘法

    我正在尝试在 NumPy Tensorflow 中进行张量乘法 我有 3 个张量 A M X h B h X N X s C s X T 我相信A X B X C应该产生一个张量D M X N X T 这是代码 同时使用 numpy 和 t
  • 在通过早期绑定使用库之前,我可以使用后期绑定来检查库是否存在吗?

    我喜欢在 VBA 项目中使用早期绑定 因为我喜欢在开发过程中自动完成方法名称等 我还喜欢知道如果我拼写错误了方法名称 编译器会警告我 但是 要使用早期绑定 我需要添加对相关库的引用 例如 Microsoft Scripting Runtim
  • 如何在独立的 .vbs 文件中从 VBScript 调用 DotNetFactory?

    我一直在探索扩展 QuickTest Professional 脚本编写功能的选项 并发现今天早上 所以我决定尝试一下 下面的代码在 QTP 环境中执行时工作正常 但我也可以看到它在 QTP 环境之外的用途 不幸的是 从独立的 vbs 文件
  • 从 Storyboard/xib 文件修改 UIImage 渲染模式

    是否可以修改一个UIImage s renderingMode来自故事板或 xib 编辑器 目标是申请tintColor对特定的UIImageView object 您可以在不设置图像渲染模式 xib文件 但是在一个 xcassets图书馆
  • 矢量化 scipy.integrate.quad

    我在用scipy integrate quad f a b args c 整合功能f之间a and b 添加另一个参数c 你可以考虑一下f as f lambda x y x y 据我了解 该功能需要a b c为浮点值 然而 我有很多积分需
  • iPhone - 按纬度和经度划分的 SQLite 距离

    我的应用程序中有一个嵌入式数据库 其中包含一些感兴趣点的所有纬度和经度 我需要知道我与这些点的距离 使用 GPS 获取我的位置 我的问题是 我刚刚发现 SQLite 无法使用我的查询来计算距离 因为它不计算三角函数 SIN COS 我试图避
  • Firebase/Android - 通过 UID 加载用户

    我只找到了加载当前登录用户的代码片段 FirebaseUser user FirebaseAuth getInstance getCurrentUser 但是 如果我需要加载其他用户的数据 例如图像路径和名称 怎么办 我想通过它们的 UID
  • 访问设备配置变量

    在我的 Rails 应用程序中 直接从视图访问 Devise 配置变量的方法是什么 我想展示config allow unconfirmed access for来自设计的 confirmable模块 该变量设置在devise rb初始化器
  • 当应用程序进入后台时(之前)iOS 拍摄的屏幕截图?

    希望大家都了解一下iOS在应用程序进入后台之前截取屏幕截图 我从那里得到的官方文件 http developer apple com library ios DOCUMENTATION iPhone Conceptual iPhoneOSP
  • 为什么我不能在 try 块内定义之前使用 Javascript 函数?

    正如所讨论的here https stackoverflow com questions 261599 why can i use a function before its defined in javascript 函数定义可以在定义之
  • 用于复制和重命名文件的 GitHub Action

    有没有一个聪明的方法copy and rename通过 GitHub Actions 文件 我想将一些自述文件复制到 docs文件夹 相同的存储库 而不是远程存储库 它们将根据其 frontmatter 在其中重命名title 目标是拥有某
  • Python-插入ms访问表

    我可以通过某些查询从 ms 访问中获取一些数据 但我无法将数据存储到任何表中 例如 import sys os pyodbc conn str r DRIVER Microsoft Access Driver mdb accdb r DBQ
  • 以编程方式禁用 UIButton 单击时的突出显示

    一定有办法做到这一点 但我找不到 我有一个以编程方式创建的按钮 UIButton button UIButton buttonWithType UIButtonTypeRoundedRect button frame CGRectMake
  • 使用 stargazer 添加一行注释

    我想运行一些回归并使用 stargazer 创建一个表 例如 linear 1 lt lm rating complaints privileges learning raises critical data attitude linear
  • C语言中有“设计模式”吗? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 升级到 MT 4.0 后不显示索引 TableView

    升级到 MT 4 0 后 以前在右侧边框上显示索引的 TableView 不再工作 表视图仍按部分显示并正常工作 但未显示索引 我在 UITableViewSource 中定义了这三种方法 并且这三种方法似乎都有效 public overr
  • 表更新事件处理程序

    我正在研究 AX 2012 中新委托和事件订阅模式的功能 目前我希望检测特定字段何时被修改 例如何时SalesTable SalesStatus更改为SalesStatus Invoiced 我创建了以下事件后处理程序并附加到 SalesT
  • 如何从 SQLAlchemy 映射对象中发现表属性

    我有一个与表映射的类 在我的例子中是以声明的方式 我想从这个类中 发现 表属性 列 名称 关系 engine create engine sqlite databasePath echo True setting up root class
  • virtualenv ImportError:没有名为 urllib3 的模块

    我在ubuntu上安装了virtualenv 但是 当我尝试创建 virtualenv 时 出现错误 我的 Zenv 文件夹不包含 activate 我该如何修复它 我会经常这样做 这是我第一次收到此错误 ubuntu ip 172 31
  • 从打包序列中获取每个序列的最后一项

    我试图通过 GRU 放置打包和填充的序列 并检索每个序列最后一项的输出 当然我的意思不是 1项目 但实际上是最后一个 未填充的项目 我们预先知道序列的长度 因此应该很容易为每个序列提取length 1 item 我尝试了以下方法 impor