인공지능 공부/딥러닝 기초

[딥러닝 기초] numpy를 사용한 다차원 배열의 계산

부농쿼카 2023. 9. 4. 23:05
728x90

본격적인 딥러닝 공부에 앞서, 딥러닝에 가장 중요한 배열의 계산에 대해 알아보겠습니다. 앞으로 나오는 모든 딥러닝은 파이썬을 사용하여 구현할 것이기 때문에 numpy 를 사용하여 배열 계산을 진행하겠습니다!

배열

다차원 배열은 숫자의 집합입니다. 숫자가 한 줄로 늘어서거나, 직사각형으로 늘어선 형태, 혹은 3차원으로 늘어선 형태를 배열이라고 합니다. 간단하게 1차원 배열부터 예제로 살펴보겠습니다.

import numpy as np

#1d array
a = np.array([1,2,3,4])
print("-"*5, "a info", "*"*5)
print(np.ndim(a))#a의 dimension 출력
print(a.shape) #a의 모양 출력
print(a.shape[0])

np.ndim() 함수를 사용하여 넘파이 배열의 차원 수를 출력할 수 있습니다. 인스턴스 변수 shape을 사용하면 배열의 모양또한 알 수 있습니다.

 

여기서 주의해야 할 점이 있습니다. 바로 shape 변수를 사용하면 튜플 형태로 출력된다는 점입니다. 실제로 출력해보면 

shape

다음과 같은 형태로 출력이 됩니다. 이는 모든 다차원 배열을 동일한 방법으로 출력해주기 위해 사용되는 방법입니다. 실제로, 2차원 배열의 shape을 출력하면

2차원 shape

다음과 같은 형태로 출력됩니다. 2차원 배열은 다음과 같은 코드로 정의할 수 있습니다.

#2d array
b = np.array([[1,2], [2,3], [3,4]])
print("-"*5, "b info", "*"*5)
print(b)
print(np.ndim(b))
print(b.shape)

3x2 배열 b를 정의했습니다. 2차원 배열은 특히 행렬이라고도 많이 부릅니다. 

행렬을 가로방향의 행과 세로 방향의 열을 합쳐 부르는 단어입니다.

 

행렬의 곱

행렬들끼리의 곱셈하는 방식에 대해 알아보겠습니다.  행렬의 곱셈은 다음과 같은 형태로 진행됩니다.

해당 수식을 넘파이를 이용하여 나타내면 다음과 같습니다.

import numpy as np
a = np.array([[1,2], [3,4]])
b = np.array([[5,6], [7,8]])

multiply = np.dot(a,b)
print(multiply)

결과

두 행렬의 곱은 np.dot 함수를 사용하여 계산합니다. 여기서 주의해야 할 점이 있습니다. np.dot(x,y)와 np.dot(y,x)는 다르다는 점입니다!

import numpy as np
a = np.array([[1,2], [3,4]])
b = np.array([[5,6], [7,8]])

multiply1 = np.dot(a,b)
multiply2 = np.dot(b,a)

print(multiply1)
print(multiply2)

결과

행렬 곱에 주의해야 할 점이 있습니다. 바로 곱할 두 행렬의 모양입니다. 행렬 A와 행렬 B의 곱셈을 한다고 했을 때, A의 첫 번째 원소 갯수와 B의 0번째 원소 갯수가 같아야 합니다! 2x3과 3x2는 행렬곱 계산이 가능하지만, 2x3과 2x3은 행렬곱 계산이 될 수 없습니다.

 

신경망에서의 행렬곱

위에서 공부한 행렬곱을 응용하여 간단한 신경망을 구현해 보겠습니다!

신경망 예시

다음과 같은 간단한 신경망을 구현해보겠습니다.

import numpy as np

X = np.random.randint(1,10,size=(1,2))
W = np.array([[1,3,5], [2,4,6]])
Y = np.dot(X,W)

print(X)
print()

print(W)
print()

print(Y)

결과

X는 1부터 10 사이 랜덤한 값으로 채워줍니다. X의 shape이 (1,2)이고 Y의 shape이 (1,3)이기 때문에 W의 shape은 (2,3)이 되어야만 합니다. 이렇게 간단한 인공 신경망까지 구현을 해보았습니다. 다음 포스팅에선 본격적으로 3층 신경망을 구현한 뒤, 간단한 손글씨 분류 예제를 풀어보려 합니다.

 

 

728x90

'인공지능 공부 > 딥러닝 기초' 카테고리의 다른 글

[딥러닝 기초] 미분  (0) 2023.10.26
[딥러닝 기초] 활성화함수  (0) 2023.08.30
[딥러닝 기초] 인공신경망  (0) 2023.08.24