运行时错误:堆栈期望每个张量大小相等,但在条目 0 处得到 [7, 768],在条目 1 处得到 [8, 768]

问题描述 投票:0回答:2

运行此代码时:

embedding_matrix = torch.stack(embeddings)

我收到此错误:

运行时错误:堆栈期望每个张量大小相等,但在条目 0 处得到 [7, 768],在条目 1 处得到 [8, 768]

我正在尝试通过以下方式使用 BERT 进行嵌入:

split_sent = sent.split()
tokens_embedding = []
j = 0
for full_token in split_sent:
    curr_token = ''
    x = 0
    for i,_ in enumerate(tokenized_sent[1:]): 
        token = tokenized_sent[i+j]
        piece_embedding = bert_embedding[i+j]
        if token == full_token and curr_token == '' :
            tokens_embedding.append(piece_embedding)
            j += 1
            break                                     
sent_embedding = torch.stack(tokens_embedding)
embeddings.append(sent_embedding)
embedding_matrix = torch.stack(embeddings)

有人知道我该如何解决这个问题吗?

python pytorch runtime-error tensor bert-language-model
2个回答
6
投票

根据 PyTorch Docs 关于

torch.stack()
函数,它需要相同形状的输入张量才能堆叠。我不知道您将如何使用
embedding_matrix
但您可以向张量添加填充(这将是末尾的零列表,直到达到特定的用户定义长度,如果您将使用此进行训练,建议您这样做)堆叠张量,请参阅 本教程)使它们等维,或者您可以简单地使用
torch.cat(data,dim=0)
之类的东西。


0
投票

我在下面遇到了同样的错误:

运行时错误:堆栈期望每个张量大小相等,但在条目 0 处得到 [3],在条目 1 处得到 [2, 4]

当我尝试使用 stack() 连接具有不同数量值的 1D 和 2D 张量时,如下所示:

import torch

tensor1 = torch.tensor([2, 7, 4]) # The size is [3].
tensor2 = torch.tensor([[5, 0, 8, 3], [3, 6, 1, 5]]) # The size is [2, 4].

torch.stack((tensor1, tensor2)) # Error

因此,我将具有相同数量值的一维张量与

stack()
连接起来,然后我可以得到如下所示的结果:

import torch

tensor1 = torch.tensor([2, 7, 4]) # The size is [3].
tensor2 = torch.tensor([5, 0, 8]) # The size is [3].

torch.stack((tensor1, tensor2))
# tensor([[2, 7, 4], [5, 0, 8]])
# The size is [2, 3].

或者,我将具有相同数量值的 2D 张量与

stack()
连接起来,然后我可以得到如下所示的结果:

import torch

tensor1 = torch.tensor([[2, 7, 4, 1], [8, 3, 2, 7]]) # The size is [2, 4].
tensor2 = torch.tensor([[5, 0, 8, 3], [3, 6, 1, 5]]) # The size is [2, 4].

torch.stack((tensor1, tensor2))
# tensor([[[2, 7, 4, 1], [8, 3, 2, 7]],
#         [[5, 0, 8, 3], [3, 6, 1, 5]]])
# The size is [2, 2, 4].
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.