RuntimeError: «exp» не реализовано для «torch.LongTensor» - PullRequest
0 голосов
/ 22 октября 2018

Я следую этому руководству: http://nlp.seas.harvard.edu/2018/04/03/attention.html для реализации модели Transformer из статьи «Внимание - это все, что вам нужно».

Однако я получаю следующую ошибку: RuntimeError: «exp» не реализовано для «torch.LongTensor»

Это строка в классе PositionalEnconding, которая вызывает ошибку:

div_term = torch.exp(torch.arange(0, d_model, 2) * -(math.log(10000.0) / d_model))

Когда здесь строится:

pe = PositionalEncoding(20, 0)

Есть идеи ??Я уже пытался преобразовать это, возможно, в тип Tensor Float, но это не сработало.

Я даже загрузил весь блокнот с сопровождающими файлами, и ошибка, похоже, сохраняется в исходном руководстве.

Есть идеи, что может быть причиной этой ошибки?

Спасибо!

Ответы [ 3 ]

0 голосов
/ 22 октября 2018

Мне довелось также следовать этому руководству.

Для меня я только что получил torch.arange для генерации тензора с плавающей запятой

из

position = torch.arange(0, max_len).unsqueeze(1)
div_term = torch.exp(torch.arange(0, d_model, 2) * -(math.log(10000.0) / d_model))

до

position = torch.arange(0., max_len).unsqueeze(1)
div_term = torch.exp(torch.arange(0., d_model, 2) * -(math.log(10000.0) / d_model))

Простое исправление,Но теперь это работает для меня.Возможно, что факел exp и sin ранее поддерживал LongTensor, но не больше (не очень уверен в этом).

0 голосов
/ 04 января 2019

Предложение, данное @shai, сработало для меня.Я изменил init метод PositionalEncoding, используя 0.0 в двух местах:

position = torch.arange(0.0, max_len).unsqueeze(1)
div_term = torch.exp(torch.arange(0.0, d_model, 2) * -(math.log(10000.0) / d_model))
0 голосов
/ 22 октября 2018

Кажется, что torch.arange возвращает LongTensor, попробуйте torch.arange(0.0, d_model, 2), чтобы заставить факел вместо FloatTensor.

...