Je suis ce tutoriel: http://nlp.seas.harvard.edu/2018/04/03/attention.html Pour implémenter le modèle Transformer à partir du document "L’attention est tout ce dont vous avez besoin".
Toutefois, l'erreur suivante s'affiche: RuntimeError: "exp" non implémenté pour 'torch.LongTensor'
C'est la ligne, dans la classe PositionalEnconding, qui cause l'erreur:
div_term = torch.exp(torch.arange(0, d_model, 2) * -(math.log(10000.0) / d_model))
Quand il est construit ici:
pe = PositionalEncoding(20, 0)
Des idées?? J'ai déjà essayé de convertir ceci en peut-être un type Tensor Float, mais cela n'a pas fonctionné.
J'ai même téléchargé tout le bloc-notes avec les fichiers d'accompagnement et l'erreur semble persister dans le didacticiel d'origine.
Des idées ce qui peut causer cette erreur?
Merci!
Il m'est arrivé de suivre ce tutoriel aussi.
Pour moi, je viens de recevoir le torch.arange
pour générer un tenseur de type float
de
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))
Juste une solution simple. Mais maintenant cela fonctionne pour moi. Il est possible que les flambeaux exp
et sin
aient précédemment pris en charge LongTensor
mais plus maintenant (pas très sûr de cela).
Il semble que torch.arange
retourne une LongTensor
, essayez torch.arange(0.0, d_model, 2)
pour forcer la torche à renvoyer une FloatTensor
à la place.
La suggestion donnée par @shai a fonctionné pour moi. J'ai modifié la méthode init
de PositionalEncoding
en utilisant 0.0
à deux endroits:
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))