scalar : 0차원
vector : 1차원
matrix : 2차원
tensor : 3차원 이상
CV
에서는 (첫번째 차원의 값 = 세로, 두번째 차원의 값 = 가로, 세번째 차원의 값 = 깊이) 기본적으로 이러한 형태를 따른다. NLP
에서는 색칠된 부분이 하나의 문장을 이루게 되고 batch size만큼 문장이 존재한다. (CV
도 마찬가지)
이제 파이토치로 알아보자
torch.FloatTensor([])
t.dim()
t.shape
t.size()
다른 크기의 tensor를 연산할 때는 주의해야 함
(자동적으로 같은 크기로 변환하여 계산해주기 때문)
내가 의도한 연산이 맞는지 주의해야 함
elementwise의 곱인지 행렬곱인지
m1.matmul(m2)
mq.mul(m2)
t.mean(dim=?)
t.sum(dim=?)
t.max(dim=?)
이때는 argmax까지 반환을 해준다는 사실!
ft.view([-1,3])
위와 같은 코드일 때,
앞에는 모르겠고 두번째 차원은 3개의 element를 갖도록!
-1을 주는 이유?
: 직접 우리가 계산하지 않고, new차원의 행렬을 만들 수 있음 (실수 down)
딥러닝에서 매우 중요한 함수
view함수처럼 차원을 바꿔주는데
squeeze는 특정 dimension의 element가 1이면 => 알아서 삭제해줌
ft.squeeze(dim=?)
차원을 지정해줄 수 있는데, element가 1일 때만 squeeze효과가 일어남
squeeze를 반대로
원하는 dimension에 차원 1을 넣어줌
반드시 dimension을 지정해줘야함!
ft.unsqueeze(dim=?)
lt.float()
lt.long()
torch.ByteTensor([])
long타입의 텐서, float타입의 텐서를 만들 수 있다는거
이어붙인다는 뜻
torch.cat([x,y],dim=?)
쌓는다는 뜻
torch.stack([x,y,z],dim=?)
x와 똑같은 사이즈의
0으로 가득찬 or 1로 가득찬 텐서 만들어짐
torch.ones_like(x)
torch.zeros_like(x)
덮어쓰기 연산
새로 선언하지 않고 텐서에 바로 적용하라는 뜻
x.mul(2.)
x.mul_(2.)