-
Forward Propagation in NumPy | Advanced Learning AlgorithmMachine Learning/Stanford ML Specialization 2024. 2. 9. 22:39
이전에 했던대로, 모든것을 Hard Coding하게 되면, 코드도 길어지고 재사용도 힘들다. 그렇다면 NumPy를 이용해 조금 더 general한 방식으로 코드를 짠다면 어떤식일까? 먼저, 사용할 데이터들을 생각해보자.
# W 값들이 정의되어있는 Matrix. 여기선 2 x 3 matrix라고 가정하자. # 1, 2는 w1, -3, 4는 w2, 그리고 5, -6은 w3이다. W = np.array([ [1, -3, 5] [2, 4, -6]]) # Bias(b) 값도 1D Array로 만들어보자. b = np.array([-1, 1, 2]) # Input a 값을 살펴보자. a_in = np.array([-2, 4])
이제, 위에 값들을 사용해서 연산 하는 코드를 작성해보자.
def dense(a_in, W, b): # W의 [1] shape를 이용해서 zeros 어레이를 만들었다. # [0, 0, 0]이 생성된다. units = W.shape[1] a_out = np.zeros(units) # unit의 갯수만큼 for loop을 돌려서 w, z, a 값을 계산한다. # 계산된 a 값은 a_out의 맞는 자리에 값이 저장된다. for j in range(units): # 해당 유닛의 w값들을 W matrix에서 가져온다. w = W[:, j] # z 값을 구하기 위해 weight과 input a를 dot product 후 bias를 더해준다. z = np.dot(w, a_in) + b[j] # g, 즉 sigmoid 함수는 다른곳에서 정의되어있다고 가정한다. a_out[j] = g(z) return a_out
이제, 이 dense 함수를 이용해서 dense layers들을 묶어볼 수 있다.
def sequential(x): a1 = dense(x, W1, b1) a2 = dense(a1, W2, b2) a3 = dense(a2, W3, b3) a4 = dense(a3, W4, b4) f_x = a4 return f_x
입력값인 x가 주어지면, a1을 계산하고, 순차적으로 a2, a3, a4를 계산했다. 이것도 조금 더 general하게 바꿔볼 수 있겠다.
Reference
Advanced Learning Algorithms
In the second course of the Machine Learning Specialization, you will: • Build and train a neural network with TensorFlow to perform multi-class ... 무료로 등록하십시오.
www.coursera.org
'Machine Learning > Stanford ML Specialization' 카테고리의 다른 글