[인공지능(AI) 기초 다지기] 5.

1. 기계 학습

1) 텐서 조작 1

– 벡터, 행렬 및 텐서

  • 벡터 : 1차원(무차원인 경우 스칼라)
    매트릭스: 2차원
    텐서: 3차원

  1. 2D 텐서(일반적인 단순 설정)
    || = (스택 크기, 희미함)
    (= 스택 크기 * 희미함) (64 * 256)
  2. 3D 텐서(일반적인 컴퓨터 비전)
    || = (배치 크기, 너비, 높이)
  3. 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)))