λ”₯λŸ¬λ‹

λ”₯λŸ¬λ‹μ„ μœ„ν•œ λ„˜νŒŒμ΄ 닀차원 ν–‰λ ¬

주영 🐱 2022. 12. 10. 12:12
728x90
λ°˜μ‘ν˜•

λ„˜νŒŒμ΄λ‘œ 닀차원 배열을 계산할쀄 μ•Œλ©΄ 신경망을 효율적으둜 계산할 수 μžˆμŠ΅λ‹ˆλ‹€. 

닀차원 배열을 숫자의 집합이 기본이 λ©λ‹ˆλ‹€. 숫자λ₯Ό Nμ°¨μ›μœΌλ‘œ λ‚˜μ—΄ν•˜λŠ” 것 λΏλ§Œμ•„λ‹ˆλΌ ν•œμ€„λ‘œ λ‚˜μ—΄ν•˜λŠ”κ²ƒλ„ 닀차원 λ°°μ—΄μ˜ μΌλΆ€μž…λ‹ˆλ‹€. 1차원 배열은 μš°λ¦¬κ°€ 읡히 μ•Œκ³  μžˆλŠ” 리슀트 ν˜•νƒœμ˜ λ°°μ—΄μž…λ‹ˆλ‹€. λ°°μ—΄μ˜ μ°¨μ›μˆ˜λŠ” np.ndim()으둜 확인할 수 μžˆμŠ΅λ‹ˆλ‹€. λ˜ν•œ λ°°μ—΄μ˜ ν˜•μƒμ€ S.shape둜 확인할 수 있죠 shapeλŠ” νŠœν”Œλ‘œ λ°˜ν™˜ν•©λ‹ˆλ‹€. 예λ₯Όλ“€μ–΄ 2차원 λ°°μ—΄μΌλ•ŒλŠ” (4,3) 3μ°¨μ›μΌλ•ŒλŠ” (4,3,2)와 같은 값을 λ°˜ν™˜ν•©λ‹ˆλ‹€. 

import numpy as np
A = np.array([[1,2],[3,4],[5,6]])

print(A)

# [[1 2]
#  [3 4]
#  [5 6]]

np.ndim(A)
#2

A.shape
#(3,2)

μ˜ˆμ‹œλ‘œ λ“  3x2 배열인 AλŠ” 처음 μ°¨μ›μ—λŠ” μ›μ†Œκ°€ 3개, λ‹€μŒ μ°¨μ›μ—λŠ” μ›μ†Œκ°€ 2개 μžˆλ‹€λŠ” μ˜λ―Έμž…λ‹ˆλ‹€. 처음 차원은 0번째 차원, κ·Έ λ‹€μŒμ°¨μ›μ€ 1번째 차원에 λŒ€μ‘ν•©λ‹ˆλ‹€. (νŒŒμ΄μ¬μ€ μΈλ±μŠ€κ°€ 0λΆ€ν„° μ‹œμž‘ν•˜κΈ° λ•Œλ¬Έ)

 

ν–‰λ ¬μ˜ κ³± 

예λ₯Ό λ“€μ–΄ 2X2 행렬은 λ‹€μŒ κ·Έλ¦Όκ³Ό 같이 κ³„μ‚°ν•©λ‹ˆλ‹€. 

νŒŒμ΄μ¬μ—μ„œλŠ” np.dot(A,B) 둜 κ³„μ‚°ν•©λ‹ˆλ‹€. 

 np.dot()은 μž…λ ₯이 1차원 배열이면 벑터λ₯Ό, 2차원 배열이면 ν–‰λ ¬ 곱을 κ³„μ‚°ν•©λ‹ˆλ‹€. μ£Όμ˜ν• μ μ€ np.dot(A,B) κ³Ό np.dot(B,A) λŠ” μ„œλ‘œ λ‹€λ₯Ό 수 μžˆμŠ΅λ‹ˆλ‹€. ν–‰λ ¬μ˜ κ³±μ—μ„œλŠ” ν”Όμ—°μ‚°μžμ˜ μˆœμ„œκ°€ λ‹€λ₯΄λ©΄ 결과도 λ‹€λ₯΄κ²Œ λ‚˜νƒ€λ‚©λ‹ˆλ‹€. 

λ‹€λ₯Έ shapeλ₯Ό 가진 행렬듀도 κ³±ν•  μˆ˜λŠ” μžˆμŠ΅λ‹ˆλ‹€. μ΄λ•Œ ν–‰λ ¬ A의 1λ²ˆλ•Œ μ°¨μ›μ˜ μ›μ†Œ 수 (μ—΄ 수)와 ν–‰λ ¬ B의 0번째 μ°¨μ›μ˜ μ›μ†Œ 수 (ν–‰ 수)κ°€ κ°™μ•„μ•Ό ν•©λ‹ˆλ‹€. μ‹€μ œλ‘œ 2X3 ν–‰λ ¬κ³Ό 2X2 행렬을 κ³±ν•˜λ©΄ λ‹€μŒκ³Ό 같은 였λ₯˜λ₯Ό 좜λ ₯ν•©λ‹ˆλ‹€. 

닀차원 배열을 κ³±ν•˜λ €λ©΄ 두 ν–‰λ ¬μ˜ λŒ€μ‘ν•˜λŠ” μ°¨μ›μ˜ μ›μ†Œ 수λ₯Ό μΌμΉ˜μ‹œμΌœμ•Ό ν•©λ‹ˆλ‹€. 

1차원을 κ³±ν• λ•Œλ„ μΌμΉ˜μ‹œμΌœμ•Όν•©λ‹ˆλ‹€.

그럼 λ„˜νŒŒμ΄ ν–‰λ ¬λ‘œ 신경망을 κ΅¬ν˜„ν•΄λ³΄κ² μŠ΅λ‹ˆλ‹€. 

편ν–₯κ³Ό ν™œμ„±ν™”ν•¨μˆ˜λ₯Ό μƒκ°ν•˜μ§€ μ•Šκ³  κ°€μ€‘μΉ˜(W)만 μƒκ°ν–ˆμ„λ•Œ, Y=np.dot(X,W)둜 κ΅¬ν˜„ν•  수 있고, 이 λ•Œ μ°¨μ›μ˜ μ›μ†Œμˆ˜ μΌμΉ˜μ‹œν‚€λŠ” 것을 확인해야 ν•©λ‹ˆλ‹€. 

 

λ°˜μ‘ν˜•