모델을 학습하려면 텐서에 대해 잘 알아야 하는데요, 텐서에 대해 제가 아는만큼 설명해보겠습니다
데이터는 다양한 차원으로 나타낼 수 있습니다.
0차원은 스칼라
1차원은 벡터
2차원은 메트릭스
3차원부터는 n-tensor라고 부릅니다.
torch.tensor(바꿀 값,dtype = torch.int32,64 / torch.float32,64 등)
요런식으로 바꿀 수 있습니다.
float으로 바꿀 경우 30 > 30. 으로 바뀝니다.
파이토치에서는 torch.Tensor(), torch.tensor() 두 함수로 데이터들을 텐서 형태로 만들 수 있습니다.
텐서 형태로 바꿔야 나중에 학습을 시킬 수 있으니,, 자주 쓰게됩니다.
import torch
t = torch.tensor([list나 넘파이배열, 숫자 등등])
>> tensor([1, 2, 3])
찾아보니 Tensor()는 클래스, tensor()는 함수라고 합니다.
Tensor()로 텐서를 바꾸면 메모리에 새로운 공간으로 만드는게 아닌 기존에 있는 애를 텐서로 바꾸기 때문에 오리지널값이 변경되면 그대로 따라간다는군요.
만약 Tensor(텐서)면 데이터타입은 float으로 바뀌고, 메모리를 공유합니다.
Tensor(배열, 어레이)라면 새롭게 공간읆 만들어서 텐서로 지정됩니다.
tensor()는 상관없이 다 새로운 공간에 저장이 된다고 합니다.
잘 모르겠으면 tensor()을 사용하는게 의도치 않은 에러를 줄일 수 있겠지만, 메모리 효율성을 위해서는 Tensor()도 잘 알아두고 적절히 사용하는 것이 좋을 듯 합니다.
| 함수 | 의미 | 결과 |
|---|---|---|
| torch.sum(tens) | 텐서의 합을 반환. | 10. |
| torch.min(tens) | 텐서 중 최소값을 반환. | 1. |
| torch.max(tens) | 텐서 중 최대값을 반환. | 4. |
| torch.pred(tens) | 텐서의 요소들의 곱의 합을 반환. | 24. |
| torch.var(tens) | 텐서들의 분산을 반환. | 1.6667 |
| torch.std(tens) | 텐서들의 표준편차를 반환. | 1.2910 |
| tens.dim(tens) | 텐서의 차원을 반환. | 2 |
| torch.fill(tens, 값) | 텐서의 모든 요소를 값으로 채움. | [[1,1],[1,1]] |
| torch.fill_(tens, 값) | 텐서의 모든 요소를 값으로 채움. (in-place 방식) | [[1,1],[1,1]] |
| tens.fill_(값) | 텐서의 모든 요소를 값으로 채움. (in place 방식) | [[1,1],[1,1]] |
torch.연산들은 모두 기본 dim이 0으로 설정돼 있습니다.
지정한 dim에 따라 다른 결과들을 얻으실 수 있습니다.
넘파이나 판다스에선 axis를 사용하는데, 토치에서는 dim이라는 개념으로 사용하더군요.
in-place방식은 판다스에서 보던 inplace = True와 같습니다.
tens = torch.fill(tens, 1)와
torch.fill_(tens, 1)는 같은 기능입니다.
변수에 다시 넣을 필요 없이 할당됩니다.
앞에서는 기존에 존재하는 값, 리스트, 어레이 등을 텐서로 바꿨다면, 토치의 함수들을 사용해 텐서를 생성할 수도 있습니다.
| 함수 | 의미 |
|---|---|
| torch.rand(크기) | 입력한 크기의 (0,1) 균등분포 난수를 생성. |
| torch.randn(크기) | 입력한 크기의 표준정규분포 난수를 생성. |
| torch.rand_like(텐서) | 입력한 텐서와 같은 크기의 (0,1) 균등분포 난수를 생성. |
| torch.randn_like(텐서) | 입력한 텐서와 같은 크기의 표준정규분포 난수를 생성. |
| torch.arange(start,end,step) | list(range(start, end, step)) 과 같은 텐서를 생성. |
| torch.empty(크기) | 입력한 크기의 초기화되지 않은 텐서를 생성. |
| torch.zeros(크기) | 입력한 크기의 요소가 전부 0인 텐서를 생성. |
| torch.zeros_like(텐서) | 입력한 텐서의 크기와 같고 요소가 전부 0인 텐서를 생성. |
| torch.ones(크기) | 입력한 크기의 요소가 전부 1인 텐서를 생성. |
| torch.ones_like(텐서) | 입력한 텐서의 크기와 같고 요소가 전부 1인 텐서를 생성. |
torch.rand() 함수나 torch.randn() 함수는 본인이 만든 모델이 알맞게 동작하는지 하나 둘 넣어 볼 때 자주 사용됩니다.
텐서의 크기를 알고 싶다면 tensor.shape나 tensor.size()를 통해 알고싶은 텐서의 크기를 볼 수 있습니다.