본문 바로가기
반응형

Study/Deep Learning15

A Note on Python/Numpy Vectors 파이썬의 브로드 캐스팅, 더 일반적으로 말해서 NumPy를 사용한 파이썬 프로그래밍의 유연성은 프로그래밍 언어의 장점과 단점 모두 될 수 있다고 생각한다. 장점으로 언어의 넓은 표현성과 유연성은 한 줄의 코드로도 많은 걸 할 수 있게 해주고, 단점으로 브로드 캐스팅의 유연성은 자세한 내용과 작동 방법을 모른다면 이상하고 찾기 힘든 오류가 생긴다. 예를 들어, 행 벡터와 열 벡터를 더한다면 차원 오류나 형 오류가 생길 거라고 생각하겠지만, 두 벡터의 합인 행렬이 나올 수도 있다. 이 결과는 파이썬 내부 논리로 처리되지만, 파이썬에 익숙하지 않다면 이상하고 찾기 어려운 오류들이 생긴다. 해당 강의에서 확인하고자 하는 것은 코드를 간단하게 하거나, 이상한 오류들을 없애줬던 NumPy를 써보려고 한다. a.sh.. 2024. 3. 26.
Broadcasting in Python 브로드 캐스팅은 파이썬 코드 실행 시간을 줄일 수 있는 또다른 기법에 해당된다. 파이썬의 브로드 캐스팅의 작동 방법에 대해 알아보고자 한다. 예시 1) 아래 이미지 내에서 행렬은 네 가지 다른 음식 100g 당 탄수화물, 단백질, 지방이 가지는 칼로리를 보여준다. 이에 목적은 각 네 가지 음식의 각 영양소가 주는 칼로리의 백분율을 구하는 것이라고 한다. (1) 각 열을 더하면, 각 음식의 총 칼로리를 알 수 있다. axis=0 라는 매개변수는 파이썬에서 세로로 더하라는 뜻이다. 가로축은 axis=1 (2) A/cal.reshape(1,4) 부분은 브로드 캐스팅의 한 예에 해당된다. (3,4) 행렬인 A를 (1,4) 행렬로 나누는 것이다. 물론, cal 코드를 실행한 이후에는 변수 cal은 이미 (1,4).. 2024. 3. 26.
Vectorizing Logistic Regression's Gradient Computation 지난 영상에 이어, m개의 훈련 샘플에 대한 for문이 남아있다. 이 연산을 벡터화하고자 한다. db에 대한 벡터화 구현을 살펴보면, 모든 dz를 더하고 m으로 나눠주는 것이다. db는 i가 1부터 m까지일 때, dz(i)의 합을 m으로 나눈 값이다. 여기서 모든 dz는 열 벡터이다. 파이썬에서는 1/m에 np.sum(dZ)라고 한다. 단순히, dZ를 가지고 이 함수를 호출하면 db를 반환한다. dw는 1/m에 X dZ^T를 곱한 값이 된다. 그 이유를 살펴보면, 이 값은 1/m에 x^(1)부터 x^(m)이 가로로 쌓인 행렬 X를 곱하고, dZ^T는 dz^(1)부터 dz^(m)까지의 벡터가 된다. 이 행렬과 벡터를 곱하면, 1/m에 x^(1) dz^(1) 부터 x^(m) dz^(m)을 모두 더한 값을 곱.. 2024. 3. 26.
Vectorizing Logistic Regression m개의 훈련 샘플이 있을 때, 아래의 값을 계산해야 한다. 정방향 전파 단계를 실행하기 위해선 (m개의 훈련 샘플에 대한 예측값 계산) for문 없이 계산하는 방법이 있다. X는 훈련 입력을 열로 쌓은 행렬이다. n_x행 m열 행렬이다. 이는 X가 (n_x,m) 차원 행렬이라는 것이다. 먼저, z^(1),z^(2),z^(3) 등을 한 단계 혹은 한 줄의 코드로 계산하는 법이다. 행 벡터이기도 한, (1,m) 행렬을 만든다. 여기에 z^(1),z^(2)에서 z^(m)까지 동시에 계산할 것이다. 이를 w^T X와 b로 이루어진 벡터의 합으로 표현될 수 있다. b로 이루어진 이것은 (1,m)벡터 혹은 (1,m)행렬이다. m차원 행 벡터이다. w^T에 x^(1), x^(2)부터 x^(m)로 이루어진 행렬을 곱하.. 2024. 3. 25.
반응형