【问题标题】:How to properly reshape a 3D tensor to a 2D forward linear layer then reshape new 3D tensor's fibers corresponding to the old 3D如何正确地将 3D 张量重塑为 2D 前向线性层,然后重塑与旧 3D 相对应的新 3D 张量纤维
【发布时间】:2020-11-18 15:00:29
【问题描述】:

我有一个来自 LSTM 的名称的 3D 张量,其形状为(批量大小 x 名称长度 x 嵌入大小)

我一直在将其重塑为 2D 以使其通过线性层,因为线性层需要(批量大小、线性维度大小)使用以下内容

y0 = output.contiguous().view(-1, output.size(-1))

这会将输出转换为(批量大小、名称长度 * 可能的字符数)

然后我将 y0 通过线性层,然后使用

将其重新整形为 3D
y = y0.contiguous().view(output.size(0), -1, y0.size(-1))

但我不确定 y 的纤维是否与输出的单元格正确相关,我担心这会扰乱我的学习,因为 1 的批量大小实际上会生成正确的名称,而任何更大的批量大小都会生成废话。

所以我的意思是
输出 =(批量大小 * 名称长度,嵌入大小)
y =(批量大小 * 名称长度,可能的字符数)

我需要确保 y[i,j,:] 是 output[i,j,:] 的线性变换版本

【问题讨论】:

    标签: python pytorch


    【解决方案1】:

    您似乎使用的是较旧的代码示例。只需“注释掉”重塑张量的代码行,因为不需要它们。

    此链接为您提供更多解释:https://discuss.pytorch.org/t/when-and-why-do-we-use-contiguous/47588

    试试这样的方法,将 LSTM 的输出直接带入线性层:

    output, hidden = self.lstm(x, hidden)
    output = self.LinearLayer1(output)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-15
      • 2020-10-14
      • 1970-01-01
      • 1970-01-01
      • 2021-09-07
      相关资源
      最近更新 更多