运行时错误:张量a的尺寸(1024)必须与张量b的尺寸(512)在非单例维度3处匹配。

4

我正在执行以下操作,

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 to seq操作,seq2seq pytorch。 实际的测试代码位于以下位置,测试seq 1024到1024输出的代码 第二个尝试的示例在这里,我已经注释掉了pos_embedding,因为出现了CUDA错误,具体原因是对大索引进行运行时错误(RuntimeError: cuda runtime error (59))。

import torch.nn as nn nn.LayerNorm(feature_size) - vinsent paramanantham
@skinny_func 请查看以下链接中的代码参考和更多示例:https://github.com/VinACE/trans-vsumm/blob/master/vasnet_seq2seq_summ.py - vinsent paramanantham
1
你是按原样运行还是有做过修改? - Dr. Prof. Patrick
1
它看起来就像是在创建掩码时大小为1024,而能量为512。 - Dr. Prof. Patrick
@skinny_func 能否请你运行一下这个参考链接(https://github.com/vinace/trans-vsumm/blob/master/vasnet_seq2seq_summ_v2.py)?你说得对,能量和掩码的尺寸是不同的。我想要理解一下为什么在我改变输入特征集时会出现这种行为。当输入特征为10时可以工作,但当我将其改为1024时就无法工作了。 - vinsent paramanantham
显示剩余3条评论
1个回答

4

我仔细查看了你的代码(顺便说一下,代码在 seq_len = 10 时无法运行),问题在于你在代码的第 143 行硬编码了 batch_size 等于 1。

看起来你试图在一个 batch_size = 2 的示例上运行模型。

只需要取消注释你之前写的那一行 batch_size = query.shape[0],一切就会正常运行。


让我检查一下。 - vinsent paramanantham
1
是的,在批量大小注释后的示例可以工作,谢谢。 - vinsent paramanantham

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接