【问题标题】:Why tensor.view() is not working in pytorch?为什么 tensor.view() 在 pytorch 中不起作用?
【发布时间】:2017-08-09 13:20:43
【问题描述】:

我有以下代码。

embedded = self.embedding(input).view(1, 1, -1)
embedded = self.drop(embedded)
print(embedded[0].size(), hidden[0].size())
concatenated_output = torch.cat((embedded[0], hidden[0]), 1)

代码的最后一行给了我以下错误。

RuntimeError:/data/users/soumith/miniconda2/conda-bld/pytorch-0.1.9_1487344852722/work/torch/lib/THC/generic/THCTensorMath.cu:141 处的张量大小不一致

请注意,当我在第 1 行打印张量形状时。 3,我得到以下输出。

torch.size([1, 300]) torch.size([1, 1, 300]) 

即使我使用了 view(1, 1, -1) 的视图方法,为什么我得到 embedded 张量的 [1, 300] 形状?

任何帮助将不胜感激!

【问题讨论】:

  • 什么是What is self.drop?? 可以在调用self.drop 函数之前打印嵌入的尺寸吗?
  • 嵌入大小相同。 self.drop 是一个 dropout 层。
  • 那么在这种情况下,print(embedded.size()) 会给你[1, 1, 300]。由于您正在打印print(embedeed[0].size),这将是[1, 300]。鉴于这些形状,您将无法执行 torch.cat 操作。您需要沿要连接的维度具有相同的大小

标签: pytorch


【解决方案1】:

embedded 是 3d 张量,hidden 是两个元素(隐藏状态和单元状态)的元组,其中每个元素都是 3d 张量。 hidden 是 LSTM 层的输出。在 PyTorch 中,LSTM 将隐藏状态 [h] 和单元状态 [c] 作为元组返回,这让我对错误感到困惑。

所以,我将代码的最后一行更新如下,它解决了问题。

concatenated_output = torch.cat((embedded, hidden[0]), 1)

【讨论】:

    猜你喜欢
    • 2020-05-20
    • 2018-12-11
    • 2021-11-06
    • 1970-01-01
    • 2018-11-27
    • 2016-12-31
    • 1970-01-01
    • 2018-11-12
    相关资源
    最近更新 更多