エラー
環境
windows10
python3.7
モジュールのバージョン
torch 1.9.0+cpu
transformers 4.30.2
エラー
RuntimeError: expected scalar type Long but found Int
エラー詳細
Traceback (most recent call last): File "bert_ner5.py", line 235, in <module> attention_mask=b_input_mask, labels=b_labels) File "C:\Users\XYZZZ\AppData\Local\Programs\Python\Python37\lib\site-packages\torch\nn\modules\module.py", line 1051, in _call_impl return forward_call(*input, **kwargs) File "C:\Users\XYZZZ\AppData\Local\Programs\Python\Python37\lib\site-packages\transformers\models\bert\modeling_bert.py", line 1778, in forward loss = loss_fct(logits.view(-1, self.num_labels), labels.view(-1)) File "C:\Users\XYZZZ\AppData\Local\Programs\Python\Python37\lib\site-packages\torch\nn\modules\module.py", line 1051, in _call_impl return forward_call(*input, **kwargs) File "C:\Users\XYZZZ\AppData\Local\Programs\Python\Python37\lib\site-packages\torch\nn\modules\loss.py", line 1121, in forward ignore_index=self.ignore_index, reduction=self.reduction) File "C:\Users\XYZZZ\AppData\Local\Programs\Python\Python37\lib\site-packages\torch\nn\functional.py", line 2824, in cross_entropy return torch._C._nn.cross_entropy_loss(input, target, weight, _Reduction.get_enum(reduction), ignore_index) RuntimeError: expected scalar type Long but found Int
予備元の関数
outputs = model(b_input_ids, token_type_ids=None,
attention_mask=b_input_mask, labels=b_labels)
解決策
Long(64ビット)でなく、Int(32ビット)が入力されていることが原因。
以下のように明示的に変換して対処しても良い。
tr_inputs = torch.tensor(tr_inputs).to(torch.int64)
できるだけ、上流で、longになるように改修するのが良いと思う。
なぜこのようなことが起きるのか(留意点)
動作実績のあるコード(GitHubや記事で公開されているコード)で、このような現象が出る理由: GPUで動作するものをCPU環境で動作させていませんか?(このあたりでNGになる可能性があるのでは?これ、想像ですけど。。。)
解決のノウハウ
可能性高:
- GPU/CPUの差で、そもそもの型の問題が発症 (<--勘、ですが。)
可能性低:
- モジュールのバージョン
コメント
コメントなどあればお願いします