[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-3. Forward propagation(순전파) and Backward propagation(역전파) 5. Merge all functions into a model |
본 포스팅에서는 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를
사용할 것이다.
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로 나눠주면 된다.
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에 대해 알아보기
> 다음 순서로 이동하기
'IT > Python' 카테고리의 다른 글
[python openCV, cv2] src.emtpy() in function ... (0) | 2021.05.27 |
---|---|
Fatal error in launcher: Unable to create process using ... (0) | 2021.05.12 |
[Basic] 문자열 자료형-문자 표시하기: Format을 이용한 포매팅 (0) | 2021.04.28 |
Python Package, Module, Library 차이 (0) | 2021.04.14 |
Numpy(작성중) (0) | 2021.04.14 |