RuntimeError:张量a(1024)的大小必须与非单维度3上张量b(512)的大小匹配

时间:2020-08-24 17:53:16

标签: python pytorch transformer seq2seq

我正在执行以下操作,

energy.masked_fill(mask == 0, float("-1e20")) 

下面是我的python跟踪,

    File "/usr/local/lib/python3.6/dist-packages/torch/nn/modules/module.py", line 722, in _call_impl
    result = self.forward(*input, **kwargs)
  File "seq_sum.py", line 418, in forward
    enc_src = self.encoder(src, src_mask)
  File "/usr/local/lib/python3.6/dist-packages/torch/nn/modules/module.py", line 722, in _call_impl
    result = self.forward(*input, **kwargs)
  File "seq_sum.py", line 71, in forward
    src = layer(src, src_mask)
  File "/usr/local/lib/python3.6/dist-packages/torch/nn/modules/module.py", line 722, in _call_impl
    result = self.forward(*input, **kwargs)
  File "seq_sum.py", line 110, in forward
    _src, _ = self.self_attention(src, src, src, src_mask)
  File "/usr/local/lib/python3.6/dist-packages/torch/nn/modules/module.py", line 722, in _call_impl
    result = self.forward(*input, **kwargs)
  File "seq_sum.py", line 191, in forward
    energy =  energy.masked_fill(mask == 0, float("-1e20"))
RuntimeError: The size of tensor a (1024) must match the size of tensor b (512) at non-singleton dimension 3

这些是我的注意力层代码,

    Q = self.fc_q(query)
    K = self.fc_k(key)
    V = self.fc_v(value)
    
    #Q = [batch size, query len, hid dim]
    #K = [batch size, key len, hid dim]
    #V = [batch size, value len, hid dim]
            
    # Q = Q.view(batch_size, -1, self.n_heads, self.head_dim).permute(0, 2, 1, 3)
    # K = K.view(batch_size, -1, self.n_heads, self.head_dim).permute(0, 2, 1, 3)
    # V = V.view(batch_size, -1, self.n_heads, self.head_dim).permute(0, 2, 1, 3)

    Q = Q.view(batch_size, -1, self.n_heads, self.head_dim).view(-1, 1024)
    K = K.view(batch_size, -1, self.n_heads, self.head_dim).view(-1, 1024)
    V = V.view(batch_size, -1, self.n_heads, self.head_dim).view(-1, 1024)
    energy = torch.matmul(Q, K.transpose(1,0)) / self.scale

我正在按照下面的github代码进行seq到seq的操作,seq2seq pytorch 实际的测试代码可在以下位置找到,code to test a seq of 1024 to 1024 output

2nd example tried在这里,我已将由于CUDA错误导致的pos_embedding注释掉,导致索引变大(RuntimeError: cuda runtime error (59)

1 个答案:

答案 0 :(得分:1)

我看了一下您的代码(顺便说一下,它没有运行bool(str2[::-1].lower().startswith(str1[::-1].lower())) ),问题是您将seq_len = 10硬编码为等于1(第batch_size行)。

似乎您要在其上运行模型的示例具有143

只需取消注释您编写batch_size = 2的上一行,一切就可以正常运行。