1. 기계 학습
1) 텐서 조작 1
– 벡터, 행렬 및 텐서
- 벡터 : 1차원(무차원인 경우 스칼라)
매트릭스: 2차원
텐서: 3차원
- 2D 텐서(일반적인 단순 설정)
|티| = (스택 크기, 희미함)
(= 스택 크기 * 희미함) (64 * 256) - 3D 텐서(일반적인 컴퓨터 비전)
|티| = (배치 크기, 너비, 높이) - 3D Tensor(일반적인 자연어 처리): 시계열/순차 데이터
|티| = (배치 크기, 길이, 치수)
시간(timestamp=길이)만큼 문장(dim)이 쌓임(batchsize)
– PyTorch 텐서 매핑
# numpy
t = np.array((0., 1., 2., 3., 4., 5., 6.))
# pytorch
t = torch.FloatTensor((0., 1., 2., 3., 4., 5., 6.))
- 방송: 자동으로 크기 계산
# vector + scalar
m1 = torch.FloatTensor(((1, 2)))
m2 = torch.FloatTensor((3))# scalar (3) -> ((3, 3))
print(m1 + m2)
# tensor(((4., 5.)))
# 2x1 vector + 1x2 vector
m1 = torch.FloatTensor(((1, 2))) # (1, 2) -> (2, 2)
m2 = torch.FloatTensor(((3), (4))) # (2, 1) -> (2, 2)
print(m1 + m2)
# tensor(((4., 5.),
# (5., 6.)))
– 행렬 곱셈
- 곱셈
동일한 위치에서 행렬 요소의 곱셈 - 행렬 곱셈
m1 = torch.FloatTensor(((1, 2), (3, 4)))
m2 = torch.FloatTensor(((1), (2))) # broadcasting -> ((1, 1), (2, 2))
print(m1 * m2) # multiplication
print(m1.mul(m2))
'''
tensor(((1., 2.),
(6., 8.)))
'''
print(m1.matmul(m2)) # matrix multiplication
'''
tensor((( 5.),
(11.)))
'''
- 평균
합계는 동일합니다
t = torch.FloatTensor(((1, 2), (3, 4)))
print(t.mean())
print(t.mean(dim=0))
print(t.mean(dim=1))
print(t.mean(dim=-1))
'''
tensor(2.500) # 전체 element
tensor((2., 3.)) # 행 (2, 2) -> (1, 2) = (2,)
tensor((1.5000, 3.5000)) # 열
tensor((1.5000, 3.5000))
'''
- 최대 및 Argmax
Argmax: max의 인덱스 값을 반환합니다.
t = torch.FloatTensor(((1, 2), (3, 4)))
print(t.max(dim=0)) # (?, ?) 값으로 리턴 <- 열 방향에서 max값 찾아서 리턴
# (tensor((3., 4.)), tensor((1, 1)))
# tensor(max value), tensor(max index) = max, argmax
print(t.max(dim=1)) # 세로로 리턴 <- 행 방향에서 max값 찾아서 리턴
print(t.max(dim=-1))
# (tensor((2., 4.)), tensor((1, 1)))