PyTorch로 Tensor 생성하기
1차원 Tensor
t = torch.FloatTensor([0,1,2,3,4,5,6])
# tensor([0., 1., 2., 3., 4., 5., 6.])
2차원 Tensor
t = torch.FloatTensor([[1, 2, 3],
[4, 5, 6],
[7, 8, 9],
[10, 11, 12]])
# tensor([[ 1., 2., 3.],
# [ 4., 5., 6.],
# [ 7., 8., 9.],
# [10., 11., 12.]])
Multiplication vs Matrix Multiplication
m1 = torch.FloatTensor([[1, 2], [3, 4]])
m2 = torch.FloatTensor([[1], [2]])
m1.matmul(m2)
# tensor([[ 5.],
# [11.]])
m1 * m2
# tensor([[1., 2.],
# [6., 8.]])
Mean
t = torch.FloatTensor([[1, 2], [3, 4]])
t.mean() # 모든 요소 -> tensor(2.5000)
t.mean(dim=0) # 행끼리 -> tensor([2., 3.])
t.mean(dim=1) # 열끼리 -> tensor([1.5000, 3.5000])
t.mean(dim=-1) # 가장 마지막 차원끼리 -> tensor([1.5000, 3.5000])
Sum
t = torch.FloatTensor([[1, 2], [3, 4]])
t.sum() # 모든 요소 -> tensor(10)
t.sum(dim=0) # 행끼리 -> tensor([4., 6.])
t.sum(dim=1) # 열끼리 -> tensor([3., 7.])
t.sum(dim=-1) # 가장 마지막 차원끼리 -> tensor([3., 7.])
Max and Argmax
t = torch.FloatTensor([[1, 2], [3, 4]])
t.max() # 요소들 중 가장 큰 값
# tensor(4.)
t.max(dim=0) # 행들 중에서 가장 큰 행의 값과 인덱스
# torch.return_types.max(
# tvalues=tensor([3., 4.]),
# tindices=tensor([1, 1]))
t.max(dim=1) # 열들 중에서 가장 큰 열의 값과 인덱스
# torch.return_types.max(
# values=tensor([2., 4.]),
# indices=tensor([1, 1]))
View (Reshape): 형태 변경
t = np.array([[[0, 1, 2],
[3, 4, 5]],
[[6, 7, 8],
[9, 10, 11]]])
ft = torch.FloatTensor(t)
ft.shape # torch.Size([2, 2, 3])
ft.view([-1, 3]) # 두번 째 차원의 개수는 3으로 고정
# tensor([[ 0., 1., 2.],
# [ 3., 4., 5.],
# [ 6., 7., 8.],
# [ 9., 10., 11.]])
ft.view([-1, 1, 3]) # 두번 째 차원의 개수는 1, 세번 째 차원의 개수는 3으로 고정
# tensor([[[ 0., 1., 2.]],
# [[ 3., 4., 5.]],
# [[ 6., 7., 8.]],
# [[ 9., 10., 11.]]])
squeeze(차원 제거)와 unsqueeze(차원 추가)
ft = torch.FloatTensor([[0], [1], [2]])
ft.shape # torch.Size([3, 1])
ft.squeeze() # 요소가 1인 dim의 차원을 제거
ft.squeeze().shape # torch.Size([3])
ft.unsqueeze(0) # 첫 번째 dim에 차원 추가
ft.unsqueeze(0).shape # torch.Size([1, 3, 1])
ft.unsqueeze(1) # 두 번째 dim에 차원 추가
ft.unsqueeze(1).shape # torch.Size([3, 1, 1])
Concatenate(병합 - 기존 차원 유지)
Stacking(병합 - 기존 차원 + 1)
Ones and Zeors