Deep Learning A to Z - ANN(2)
1. Build ANN - keras
Tensorflow의 keras와 Dense 모듈을 사용하여 ANN을 직접 구현한다.
Squencial은 ANN을 초기화하는데 사용하며, Dense는 ANN 의 Layer를 정의하는데 사용한다.
라이브러리
- numpy / matplotlib / pandas / keras
2. 로직
- ANN학습을 위한 Dataset을 준비한다.
# Splitting the dataset into the Training set and Test set
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.25, random_state = 0)
# Feature Scaling
from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform(X_test)
- 이번 예제에서 X_train, X_test, y_train, y_test 으로 ANN 학습을 시킬 예정이다.
- 이제 ANN 을 구성한다. 구성을 위한 라이브러리 임포트를 진행한다.
#Part2. Create the ANN
#Step1. Importing Keras and other libraries
import keras
from keras.models import Sequential
from keras.layers import Dense
- 위 설명과 같이 Sequential은 ANN을 초기화 하기 위한 모듈이며, Dense는 ANN의 Layer을 정의할때 사용한다.
#Part2. Create the ANN
#Step1. Importing Keras and other libraries
import keras
from keras.models import Sequential
from keras.layers import Dense
#Step2. Initialize the ANN
classifier = Sequential()
# Only Have ANN Template
- Sequential을 통해 ANN(classifier)를 초기화한다.
- classifier라는 ANN 템플릿 만 정의된 상태이며, Dense 와 Sequential을 통해 템플릿을 완성해야 한다.
- ANN의 학습과정을 잠시 설명한다.
- 위 그림과 같이, 각 노드(Xn)가 input node가 되며, Synapse(w)의 가중치에 따라 Activation function 의 값이 정의되고,이 값에 의해 output이 결정된다.
ANN 학습순서
- Hidden layer로 가는 Synapse를 0보다 큰 아주 작은 변수로 초기화
- Training Dataset의 데이터 하나를 넣각 데이터컬럼(데이터)를 InputNode에 맵핑 시킨다.
- Feedforward propagation : 초기화된 Synapse와 맵된 Input node의 값에 따라 Activation function을 적용하여 ANN을 활성화 한다.
구한 값과 Dataset의 값을 비교한다.
Backward error propagation : 오차를 최소화 하기 위해 역으로 다시 계산을 하여, Synapse 값을 조정한다.
위 5단계를 반복한다. 보통 각 데이터 별로 진행하는 방법을 Reinforce training이라고 한다. 예제에서 사용한 방법은 Stochastic Gradient Descent 방법이다.(한꺼번에 비교하는 방법은 Batch learning).
학습시키는 정도를 Epoch 라고 하며 사용자가 정의할 수 있다.
#Part2. Create the ANN
#Step1. Importing Keras and other libraries
import keras
from keras.models import Sequential
from keras.layers import Dense
#Step2. Initialize the ANN
classifier = Sequential()
# Only Have ANN Template
#Step3. Adding the input layer and the first hidden layer
#Dense(output_dim =6, init='uniform', activation='relu', input_dim = 11)
classifier.add(Dense(units = 6, activation='relu', kernel_initializer='uniform', input_shape=(11,)))
#Adding 2nd hidden layer
#Classifer already know input shape -> doesnt need to know # of input nodes
classifier.add(Dense(units = 6, activation='relu', kernel_initializer='uniform'))
#Adding final layer [output layer]
classifier.add(Dense(units = 1, activation='sigmoid', kernel_initializer='uniform'))
- 초기화 된 classifier 에 Dense function을 통해 Input layer, Output layer, Hidden layer를 정의하자.
- 첫번째 Dense 호출
- 1st Layer = Input layer 이므로 Input node의 갯수도 정의
- unit = output node의 갯수
- output node의 갯수는 보통 input node 갯수의 절반의 최대값으로 결정한다.
- activation = 사용할 Activation function 이름 [ REctifier Function]
- kernel_initializer = dataset의 분포상태 -> uniform : 표준정규분포
- input_shape = input data의 값
- 두번째 Dense 호출
- 1st layer가 있으므로 input_dim 은 정의할 필요가 없으며, activation function 은 Rectifier function이다.
- 세 번째 Dense 호출
- Output layer 이며, 예제에서 필요한 결과는 Perpective, (회원인지 가능성) 이므로, 출력결과는 비율이다.
- Activation function은 sigmoid function 이다.