IT/Python

[Deeplearning] LOGISTIC REGRESSION CODE REVIEW-1

파프양 2021. 5. 5. 00:05
728x90

[Deeplearning] LOGISTIC REGRESSION CODE REVIEW-1

 

해당 포스팅은 Coursera에서 진행하는 Deeplearning의 Neural Networks and Deep Learning의 코드를 개인의 학업을 목적으로 리뷰한 내용으로 오류가 있을 수도 있으며, 목차는 아래와 같다.

 

전체 프로세스

1. Packages: 필요한 Package import

2. Overview of the problem set: 필요한 Data Set import 후, 시각화(산점도)

3. General architecture of the learning algorithm

4. Building of the parts of algorithm
  4-1. Helper function: sigmoid 함수 작성
  4-2. lnitializing the parameter(파라미터 초기화)

  4-3. Forward propagation(순전파) and Backward propagation(역전파)
  4-4. Otimization(최적화)

5. Merge all functions into a model
6. Further analysis
7. Test with your own image

본 포스팅에서는 1~3까지를 다룬다. 

 

Logistic Regression with a Neural Network mindset

 

여기서 다룰 모델은 고양이의 사진을 불러와 고양이인지(1) 아닌지(0) 구분하는 모델이다. loops(for/while)문은 사용하지 않으며, sigmoid함수는 패키지를 사용하는 것이 아니라 직접 선언해서 사용한다.

 

 

1. Packages

필요한 패키지들을 불러온다.

  • NumPy는 과학 컴퓨팅을 위한 패키지로 다차원 배열 객체를 다루고 이에 필요한 연산 등을 제공해 루틴한 작업을 빠르고 쉽게 처리할 수 있게 해줍니다.Matplotlib은 python에서 그래프를 그릴 때 사용하는 패키지입니다.
  • h5py는 파이썬에서 hdf5(Hierarchical Data Format version 5)의 이진 데이터 포맷을 다룰 수 있게 해준다. hdf5는 많은 양의 데이터와 numpy데이터를 더 쉽게 다룰 수 있도록 해주기 때문에 고성능 DB로 주로 과학기술데이터의 포맷으로 적당하다. BSD 스타일의 라이선스를 채택해 수정, 배포, 상용 프로그램 사용 등에 자유롭다.
  • matplotlib는 python에서 그래프를 그릴 수 있게 해주는 유명한 라이브러리다.
  • PIL 및 SciPy는 과학기술계산을 위한 Python 라이브러리다. NumPy, Matplotlib, pandas, SymPy와 연계되어 있습니다. 여기에서는 끝에서 스스로의 사진을 이용해 테스트 할 때 사용된다. 

 

2. Overview of the Problem set

1. Data를 불러옵니다.
           A. 
학습데이터: train_set_x_orig(변수), train_set_y(실측값)

           B. 실험데이터: test_set_x_orig(변수), test_set_y(예측값)  

      *   _orig를 붙인 이유는 이 데이터들을 전처리할 것이기 때문이다. 마지막에는 이미 전처리가 된 train_set_x를

         사용할 것이다.

 

 

train dataset의 형태



2.     Plt.imshow(train_set_x_orig[index]) 25번째 이미지를 불러와 보여준다.

 

 

3.     m examples의 개수로서, m_train은 학습데이터의 개수, m_test는 실험 데이터의 개수를 나타낸다. Index 0으로 설정해 준 이유는 데이터들의 0번 인덱스가 examples 수를 나타내기 때문이다.

   Ø  Train_set_x_orig shape: (example data 209, pixel 64, pixel 64, colorlayer_RGB 3)

   Ø  Test_ste_x_orig shape: 학습데이터와 상동

   Ø  Num_px: (pixel 64, pixel 64, colorlayer_RGB 3)

 

그 결과, 학습데이터(trainig data)의 examples는 209개, 테스트데이터(testing data)의 examples는 50개이며 이미지의 가로, 세로 픽셀은 64px임을 알 수 있었다. 컬러 이미지이기 때문에 R, G, B 값을 가지고 있고 따라서 각 이미지의 사이즈는 64x64x3이다. 

 

 

4.    처리 속도를 높여주기 위해 다차원의 배열을 차원축소(Flatten)를 실시한다. 이 작업 이후 하나의 열벡터(column)는 한 개의 의미지를 의미한다. 

 

변경 전: (m, num_px, num_px, 3)

변경 후: (num_px*num_px*3, m)

 

Ø  기존 3차원(num_px, num_px, 3)에서 1차원(num_px*num_px*3, 1)의 열벡터로 단순하게 바뀌었다

    변경 전의 데이터 형태가 행(row)이 각 이미지의 examples를 의미했으므로 

    .T를 이용해 전치(transpose)시켜주면 열이 각 이미지를 의미하게 된다. 

 

Ø  array.reshape((m,n))는 mxn 매트릭스의 형태로 바꿔주는 함수다. 
    train_set_x_flatten
의 경우 m train_set_x_orig.shape[0](example의 개수), n -1(나머지 컬럼 자동 선택)에
    해당하며, 각각 209, 12288의 숫자가 나온 것을 .T(transpose) 전치시켜준 것이다. 전치까지 시켜줘야 우리가
    실행할 모델의 모습과 같이 example이 열로 배치된다. Test data도 마찬가지의 형태다.

 

 

5. ML(Machine learning)의 일반적인 단계로 표준화(standardization)를 진행할 때 데이터셋의 중앙값이나 표준값(각 examples의 평균)으로 각 examples를 나눠주게 되는데, 여기서 다루는 컬러이미지의 경우 RGB의 0~255까지의 값을 갖는 3개의vector이므로 간단하게 모든 examples들을 255로 나눠주면 된다. 

 

dataset들을 matrix이지만 그냥 /해줘도 broadcasting에 의해 각 요소들이 알아서 나눠진다. 행렬의 성질과 동일.

 

 

3. General Architecture of the learning algorithm

neural network의 사고방식을 이용해서 이미지가 고양이인지 아닌지 구분하는 Logistic Regression 모델을 디자인해보자. 

 

 

z는 np.dot(w.T, x) + b의 선형식으로 이루어져 있다. 

* w(weight, 가중치)와 x(데이터), b(절편)은 모두 matrix형태

 

y_hat인 y의 예측치는 a(activate function)를 적용한 z다. 여기서 activate function은 sigmoid 함수를 이용한다. 

따라서, y_hat = a = sigmoid(z)의 형태가 된다. 

 

여기에서 J는 Cost Function으로 비용함수(Loss Function)를 의미하는데, Loss function은 주로 Log loss(Cross Entropy)를 이용한다. 그 외에 Squared Error Loss(MSE)가 있다. 

 

>Activate function에 대해 알아보기

>Log Loss에 대해 알아보기

 

 

> 다음 순서로 이동하기

728x90