Torch를 Import 시킬 수 없는 에러를 해결하는 방법?
ImportError: cannot import name 'TypeAlias' from 'typing_extensions' (/opt/ohpc/pub/apps/python3/3.8.8/lib/python3.8/site-packages/typing_extensions.py)
- Torch Version이 1.13.0 최신 버전이었는데, 이게 문제가 있어서 다운그레이드 해야한다.
- python3 -m pip uninstall torch
- pytorch를 삭제하고 버전을 낮춰 설치한다.
- pip3 install torch==1.8.1
- torchvision을 설치하게되면 torch 버전이 낮아서 torch 버전을 업데이트 해버리게 되니, torchvision도 torch 버전과 상호되는 버전을 설치한다.
https://pypi.org/project/torchvision/
- 위 사이트에 각 버전에 맞는 torchvision을 찾아 설치한다.
torch를 import할때 생기는 문제를 해결하면 target 에러가 발생한다.
Traceback (most recent call last):
File "/opt/ohpc/pub/apps/python3/3.8.8/lib/python3.8/runpy.py", line 194, in _run_module_as_main
return _run_code(code, main_globals, None,
File "/opt/ohpc/pub/apps/python3/3.8.8/lib/python3.8/runpy.py", line 87, in _run_code
exec(code, run_globals)
File "/home/015897271/spoter/train.py", line 271, in <module>
train(args)
File "/home/015897271/spoter/train.py", line 174, in train
train_loss, _, _, train_acc = train_epoch(slrt_model, train_loader, cel_criterion, sgd_optimizer, device)
File "/home/015897271/spoter/spoter/utils.py", line 19, in train_epoch
loss = criterion(outputs[0], labels[0])
File "/home/015897271/.local/lib/python3.8/site-packages/torch/nn/modules/module.py", line 889, in _call_impl
result = self.forward(*input, **kwargs)
File "/home/015897271/.local/lib/python3.8/site-packages/torch/nn/modules/loss.py", line 1047, in forward
return F.cross_entropy(input, target, weight=self.weight,
File "/home/015897271/.local/lib/python3.8/site-packages/torch/nn/functional.py", line 2693, in cross_entropy
return nll_loss(log_softmax(input, 1), target, weight, None, ignore_index, None, reduction)
File "/home/015897271/.local/lib/python3.8/site-packages/torch/nn/functional.py", line 2388, in nll_loss
ret = torch._C._nn.nll_loss(input, target, weight, _Reduction.get_enum(reduction), ignore_index)
IndexError: Target 79 is out of bounds.
- 먼저, datasets/czech_slr_dataset.py 파일에 있는 104번 줄의 코드를 고쳐야한다.
# 104번 줄의 코드
label = torch.Tensor([self.labels[idx] - 1])
# 수정한 코드
label = torch.Tensor([self.labels[idx]])
- 코드를 고치고 이제 훈련시킬때 --nums_classes 100을 추가하여 실행시킨다.
python3 -m train --training_set_path train_set/WLASL100_train_25fps.csv --validation_set_path valid_set/WLASL100_val_25fps.csv --testing_set_path test_set/WLASL100_test_25fps.csv --num_classes 100
train이 시작되면 아래와 같은 화면이 뜬다.