티스토리 뷰
[C++] RuntimeError: Cannot input a tensor of dimension other than 0 as a scalar argument
happy_dohee 2021. 10. 6. 13:39이 역시 pytorch에서 torchscript로 저장한 model을 불러와 forward하는 도중 만난 error.
(솔직히 pytorch에서 scriptmodule로 변환 성공했으면 그 모델 가져왔을 때는 좀 그냥 돌아야하는거 아니냐...
double check하기 힘들다...ㅇㅅㅇ)
RuntimeError: Cannot input a tensor of dimension other than 0 as a scalar argument 가 난 부분은
tmp = torch.tensor(tmp)
이 줄을 실행하다가 저 에러가 났다.
ㅇㅅㅇ 이게 왜그런가 봤는데 numpy가 input으로 들어가면서 난 error 같았다.
python가서 직접 tmp의 type을 찍어보니 numpy가 나오고, 사실 numpy -> tensor 변환은 tensor.from_numpy를 써야했지만 나는 이걸 쓰기엔 중간에 tmp를 다시 부를 때는 tmp의 type이 tensor가 되어있어서 중간에 에러가 나서 돌지 않기 때문에 그냥 범용적ㅇ니 torch.tensor를 사용하였다. 그랬더니 C++에서 사용할 때 에러가 나네 .ㅇㅅㅇ
여튼 해결을 하긴 했는데
tmp = tensor.as_tensor(tmp)
를 사용하니 C++에서도 error 없이 넘어갔다.
torch.tensor 와 torch.as_tensor 의 차이는
전자는 항상 데이터를 복사하고
후자는 데이터의 복사를 피하려고 한다는데 보통 원본 데이터가 numpy array일 때라고 한다.
근데 이게 memory copy 관점에서 다른 것 같은데 왜 하나는 error가 나고 하나는 안나는 것일지 궁금하다.
https://pytorch.org/docs/stable/generated/torch.as_tensor.html
torch.as_tensor — PyTorch 1.9.1 documentation
Shortcuts
pytorch.org
'이것저것 자료 > C++' 카테고리의 다른 글
[C++] torch scriptModule 실행 시 Unknown type name 'NoneType' (0) | 2021.10.06 |
---|---|
[C++] warning: backslash and newline separated by space (0) | 2021.03.25 |
- Total
- Today
- Yesterday
- LGSVL
- pytorch
- 백트래킹
- tensorflow
- 코딩테스트
- numpy
- 동적프로그래밍
- dfs
- 최소신장트리
- notfound
- 카카오
- shellscript
- Python
- error
- 프로그래머스
- BFS
- 설치
- 다익스트라
- torchscript
- n과m
- torch
- matplotlib
- 파이썬
- docker
- 백준
- 설치하기
- version
- PIP
- 이것이코딩테스트다
- CUDA
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |