【问题标题】:Concatenate two tensors of different shape from two different input modalities连接来自两个不同输入模式的两个不同形状的张量
【发布时间】:2021-09-02 19:41:10
【问题描述】:

我有两个张量:

a = torch.randn((1, 30, 1220)) # represents text embedding vector (30 spans, each with embedding size of 1220)
b = torch.randn((1, 128, 256)) # represents image features obtained from a pretrained CNN (object detection)
  1. 如何将 b 中的所有内容连接到 a 的 30 个跨度中的每一个?

  2. 如何将整个b 连接到整个a

这就是我想要做的:

作者只提供了以下文字:

我正在从 3d 点云(类似于 CNN,但用于 3d)中提取特征(红色轮廓),如下所示:

【问题讨论】:

  • [...] 128, 256):这些是你的空间维度吗?
  • 是的,这些是代表图像中所有对象位置的空间维度。
  • 他们不是更详细地描述了e_n的尺寸吗?
  • 这是我为 e_n 找到的(这是矢量化的跨度表示)Shape: (batch_size, num_spans, embedding_size + 2 * encoding_dim + feature_size)
  • 好吧,似乎有一个缺失的部分,如果你想连接axis=2上的那些,你需要在你的CNN输出中的某个地方有num_spans。你知道num_spans对应什么吗?是随便选的吗?

标签: python machine-learning deep-learning pytorch concatenation


【解决方案1】:

您正在寻找组合两个不同形状的张量,没有简单的方法连接它们。两个张量都保存有关同一实例的信息:您想要通过两种不同的模式嵌入特征来表征的元素:文本和视觉。

对我来说唯一有意义的方法是学习两个单独的层,以将您的文本嵌入和图像特征映射到一个可以轻松融合它们的公共空间。

您为此映射采用的设计完全取决于您。当然,这个映射层需要通过训练来学习在另一端应用某种监督。

【讨论】:

  • 感谢您的回复。我已经更新了这个问题,提供了更多关于我正在尝试做什么的信息。
  • 第一个张量用于描述图像中对象的文本描述,而第二个张量是图像中每个对象的学习特征。
【解决方案2】:

由于这些表示来自两种不同的模式(即文本和图像),并且它们包含对最终目标非常重要的有价值的特征,我建议将它们融合到“可学习的" 的方式,而不是单纯的串联或加法。此外,这种可学习的权重(特征之间)将是最佳的,因为在某些情况下,一种表示会比另一种表示更有用,而在其他情况下,反之亦然。

请注意,在您要实现的这个融合模块中也可能发生单纯的串联。对于实际实现,有几种类型的融合技术。例如。简单融合、冷融合等(参见Fusion Models for Improved Visual Captioning, 2021

例如,一个简单的想法是使用一个简单的线性层将其中一个特征投影到与另一个相同的维度上,然后进行简单的连接,如果需要,可以使用一些可选的非线性。

【讨论】:

    猜你喜欢
    • 2020-08-27
    • 1970-01-01
    • 2022-01-22
    • 2019-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-07
    • 1970-01-01
    相关资源
    最近更新 更多