오늘은 텐서를 직접 다뤄보는 작업이랑, 논문을 직접 보면서 이해하는 작업을 좀 했다. 그동안은 책 속의 내용이나 블로그 중심으로 봤다면, 이제 좀 더 논문을 보고 실제 구현해보는 연습들을 조금씩 해보려고 한다. 이번 논문은 사실 코드랄게 없어서, 내용 이해와 개념 정리 정도만 했는데 다음부터는 좀 더 정리해보려고 한다.
파이썬 사용시 이 빠른 속도의 이점을 누리려면 반복문 사용보다는 array나 tensor에 직접적으로 작동하는 명령어를 사용해야한다.
- 파이토치나 넘파이는 모두 파이썬으로 짜여진게 아니라 저차원의 코드로 해서 속도를 높인 라이브러리라서 파이썬보다 매우 빠르다.
- 그 중 파이토치는 GPU에 텐서를 적재할 수 있어 병렬 계산을 할 수 있고, 자동 미분해준다는게 큰 장점
torch.stack은 torch.stack([a,b])하면, (2,3,4) shape을 만들어준다.(a,b모두 3,4 텐서라고 했을 때)
concat은 인자로 Dim을 지정해줄 수 있어서 6,4나 3,8로 만들어줄 수 있음
seven_tensors = [tensor(Image.open(o)) for o in sevens]
stacked_sevens = torch.stack(seven_tensors).float()/255
stacked_sevens.shape
*torch.Size([6131,28,28])
torch.mean
import torch
arr = torch.FloatTensor([[[1, 2,3],
[3, 4,1]],
[[5, 6, 7],
[7, 8, 9]]])
print(arr.mean(dim = 0).shape)
print(arr.mean(dim = 0))
결과값
torch.Size([2, 3])
tensor([[3., 4., 5.],
[5., 6., 5.]])
주어진 dim에 대해서 mean을 한다는 건, 해당 차원을 제거한다와 같다고 보면 될듯
print(arr.mean(dim = 1).shape)
print(arr.mean(dim = 1))
결과값
torch.Size([2, 3])
tensor([[2., 3., 2.],
[6., 7., 8.]])
print(torch.mean(arr, dim = (0,1)).shape)
print(torch.mean(arr, dim = (0,1)))
결과값
torch.Size([3])
tensor([4., 5., 5.])
