now is better than never
[인공지능(AI) 기초 다지기] 5. 딥러닝 핵심 기초 (2) 본문
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)
- torch.cat([x, y], dim=0)
- 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.) - 하지만 속도면에서는 크게 이점이 없을 것,,?
'Python > [코칭스터디 9기] 인공지능 AI 기초 다지기' 카테고리의 다른 글
[인공지능(AI) 기초 다지기] 5. 딥러닝 핵심 기초 (4) (0) | 2023.03.07 |
---|---|
[인공지능(AI) 기초 다지기] 5. 딥러닝 핵심 기초 (3) (0) | 2023.03.07 |
[인공지능(AI) 기초 다지기] 4. 기초튼튼, 수학튼튼 (6) (0) | 2023.02.22 |
[인공지능(AI) 기초 다지기] 4. 기초튼튼, 수학튼튼 (5) (0) | 2023.02.22 |
[인공지능(AI) 기초 다지기] 4. 기초튼튼, 수학튼튼 (4) (0) | 2023.02.20 |