RuntimeError: размер тензора a (1024) должен соответствовать размеру тензора b (512) в не-одноэлементном измерении 3

Я делаю следующую операцию,

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

мои следы питона ниже,

    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 фактический тестовый код доступен по следующему адресу: код для проверки последовательности выходных данных от 1024 до 1024

2-й пример, попробованный здесь Я прокомментировал pos_embedding из-за ошибки CUDA с большим индексом (RuntimeError: ошибка времени выполнения cuda (59)


person vinsent paramanantham    schedule 24.08.2020    source источник
comment
не могли бы вы поделиться фрагментом кода, в котором вы определяете mask?   -  person Dr. Prof. Patrick    schedule 25.08.2020
comment
импортировать torch.nn как nn nn.LayerNorm (размер_функции)   -  person vinsent paramanantham    schedule 25.08.2020
comment
@skinny_func, пожалуйста, найдите несколько ссылок на код и еще несколько примеров, ссылки на код находятся в приведенной ниже ссылке github.com/VinACE/trans-vsumm/blob/master/   -  person vinsent paramanantham    schedule 25.08.2020
comment
пример кода, github.com/VinACE/trans-vsumm/blob/master /   -  person vinsent paramanantham    schedule 25.08.2020
comment
@skinny_func у вас было время протестировать вышеупомянутые коды github.com/VinACE/trans-vsumm/blob/master/   -  person vinsent paramanantham    schedule 26.08.2020
comment
вы все запустили как есть или что-то поменяли?   -  person Dr. Prof. Patrick    schedule 26.08.2020
comment
Просто похоже, что когда вы создаете маску, она имеет размер 1024, а энергия - 512.   -  person Dr. Prof. Patrick    schedule 26.08.2020
comment
@skinny_func, не могли бы вы запустить ссылочную ссылку (github.com/vinace/ trans-vsumm / blob / master /), вы правы, энергия и размеры маски разные, я хотел понять, почему такое поведение, когда я изменил набор функций ввода, для функции ввода 10 оно работает, когда я изменил его на 1024, он не   -  person vinsent paramanantham    schedule 27.08.2020


Ответы (1)


Я взглянул на ваш код (который, кстати, не работал с seq_len = 10), и проблема в том, что вы жестко запрограммировали batch_size равным 1 (строка 143) в вашем коде.

Похоже, что в примере, на котором вы пытаетесь запустить модель, есть batch_size = 2.

Просто раскомментируйте предыдущую строку, в которой вы написали batch_size = query.shape[0], и все будет нормально.

person Dr. Prof. Patrick    schedule 27.08.2020
comment
позволь мне проверить это - person vinsent paramanantham; 27.08.2020
comment
да пример после комментирования работы размера партии, спасибо, - person vinsent paramanantham; 28.08.2020