Pytorch 期望每个张量大小相等

sam*_*sam 6 python pytorch tensor bert-language-model

运行此代码时:embedding_matrix = torch.stack(embeddings)

我收到这个错误:

RuntimeError: stack expects each tensor to be equal size, but got [7, 768] at entry 0 and [8, 768] at entry 1
Run Code Online (Sandbox Code Playgroud)

我正在尝试通过以下方式使用 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)
Run Code Online (Sandbox Code Playgroud)

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

Sat*_*ash 6

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