now is better than never

[인공지능(AI) 기초 다지기] 5. 딥러닝 핵심 기초 (2) 본문

Python/[코칭스터디 9기] 인공지능 AI 기초 다지기

[인공지능(AI) 기초 다지기] 5. 딥러닝 핵심 기초 (2)

김초송 2023. 3. 7. 15:55

1-2) Tensor Manipulation 2

 

- Matrix Multiplication

  • View (numpy : Reshape)
    • 원하는 대로 tensor, matrix의 shape를 바꾸는 함수
t = np.array([[[0, 1, 2],
               [3, 4, 5]],
              [[6, 7, 8],
               [9, 10, 11]]])

ft = torch.FloatTensor(t)

print(ft.size())
print(ft.view([-1, 3])) # -1 : 정해진 크기에 맞춰서 자동으로 정해짐
print(ft.view([-1, 3]).shape)

'''
torch.Size([2, 2, 3])
tensor([[ 0.,  1.,  2.],
        [ 3.,  4.,  5.],
        [ 6.,  7.,  8.],
        [ 9., 10., 11.]])
torch.Size([4, 3])
'''

print(ft.view([-1, 1, 3]))
print(ft.view([-1, 1, 3]).shape)

'''
tensor([[[ 0.,  1.,  2.]],

        [[ 3.,  4.,  5.]],

        [[ 6.,  7.,  8.]],

        [[ 9., 10., 11.]]])
torch.Size([4, 1, 3])
'''
  • Squeeze / Unsqueeze
    • squeeze : view 함수와 비슷 -> 원하는 dimension이 1인 경우 그 dimension을 없애줌
    • unsqueeze : 원하는 dimension에 1을 넣어줌, dimension을 꼭 명시해야 함
      ft.unsqueeze(0) : dimension 0에 1을 넣어라 (3, ) -> (1, 3)

 

- Type Casting

  • ByteTensor : True / False 를 1 / 0 으로 저장
  • torch.float() <-> torch.long()

 

- Concatenate / Stacking

  • concatenate
    • torch.cat([x, y], dim=0)
      : dim = 0 방향으로 늘어남,  [(2, 2), (2, 2)] -> (4, 2), 행 방향으로 합침
    • torch.cat([x, y], dim=1)
      : [(2, 2), (2, 2)] -> (2, 4)
  • Stacking
    • 좀 더 편리한 concat
    • torch.stack([x, y, z])
      : [(2, ), (2, ), (2, )] -> (3, 2)
       dim 0 자리에 차원이 새로 생김
    • torch.stack([x, y, z], dim=1) = torch.cat([x.unsqueeze(0), y.unsqueeze(0), z.unsqueeze(0)], dim=0)
      : [(2, ), (2, ), (2, )] -> (2, 3)
       x, y, z가 열 방향(세로 정렬이 양 옆으로)으로 쌓임

 

- Ones / Zeros

  • torch.ones_like(x) / torch.zeros_like(x)
    : x와 똑같은 shape의 1 / 0으로 가득 찬 tensor
  • CPU/GPU -> 같은 device를 선언함...?

 

- Inplace Operation

  • x.mul(2.) : x tensor 모든 값에 곱하기 2
  • x.mul_(2.) : 기존 x tensor의 값도 갱신함 (= inplace)
    x = x.mul(2.)
  • 하지만 속도면에서는 크게 이점이 없을 것,,?