web-dev-qa-db-ja.com

RuntimeError:「exp」は「torch.LongTensor」には実装されていません

私はこのチュートリアルに従っています: 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型に変換しようとしましたが、これはうまくいきませんでした。

付属のファイルを含むノートブック全体をダウンロードしましたが、元のチュートリアルではエラーが続くようです。

このエラーの原因は何ですか?

ありがとう!

13
noob

私もたまたまこのチュートリアルに従っていました。

私にとっては、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))

簡単な修正。しかし、今では私にとってはうまくいきます。トーチexpsinは以前はLongTensorをサポートしていましたが、もうサポートしていなかった可能性があります(これについてはよくわかりません)。

27
LU Jialin

_torch.arange_はLongTensorを返すようです。代わりにtorch.arange(0.0, d_model, 2)を試して、代わりにトーチにFloatTensorを返させてください。

3
Shai

@shaiからの提案は私のために働いた。 0.0を2つの場所で使用して、initPositionalEncodingメソッドを変更しました。

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))
1
user214581