Keras
가장 좋은 방법은 케라스 공식 문서(https://keras.io/)를 참고하는 것입니다.
- 케라스의 함수형 API(Keras Functional API)
컴파일(Compile)과 훈련(Training)
compile(): 모델을 기계가 이해할 수 있도록 컴파일 합니다. 오차 함수와 최적화 방법, 메트릭 함수를 선택할 수 있습니다.
# 이 코드는 뒤의 텍스트 분류 챕터의 스팸 메일 분류하기 실습 코드를 갖고온 것임. from tensorflow.keras.layers import SimpleRNN, Embedding, Dense from tensorflow.keras.models import Sequential max_features = 10000 model = Sequential() model.add(Embedding(max_features, 32)) model.add(SimpleRNN(32)) #RNN에 대한 설명은 뒤의 챕터에서 합니다. model.add(Dense(1, activation='sigmoid')) model.compile(optimizer='rmsprop', loss='binary_crossentropy', metrics=['acc'])
위 코드는 임베딩층, 은닉층, 출력층을 추가하여 모델을 설계한 후에, 마지막으로 컴파일 하는 과정을 보여줍니다.
optimizer : 훈련 과정을 설정하는 옵티마이저를 설정합니다. adam이나 sgd와 같이 문자열로 지정할 수도 있습니다.
loss : 훈련 과정에서 사용할 손실 함수(loss function)를 설정합니다.
metric : 훈련을 모니터링하기 위한 지표를 선택합니다.
문제 유형 | 손실 함수명 | 출력층의 활성화 함수명 | 참고 설명 |
---|---|---|---|
회귀 문제 | mean_squared_error (평균 제곱 오차) | - | - |
다중 클래스 분류 | categorical_crossentropy (범주형 교차 엔트로피) | 소프트맥스 | 10챕터 로이터 뉴스 분류하기 실습 참고 |
다중 클래스 분류 | sparse_categorical_crossentropy | 소프트맥스 | 범주형 교차 엔트로피와 동일하지만 이 경우 원-핫 인코딩이 된 상태일 필요없이 정수 인코딩 된 상태에서 수행 가능 |
이진 분류 | binary_crossentropy (이항 교차 엔트로피) | 시그모이드 | 10챕터 스팸 메일 분류하기, IMDB 리뷰 감성 분류하기 실습 참고 |
fit() : 모델을 학습합니다. 모델이 오차로부터 매개 변수를 업데이트 시키는 과정을 학습, 훈련, 또는 적합(fitting)이라고 하기도 하는데, 모델이 데이터에 적합해가는 과정이기 때문입니다. 그런 의미에서 fit()은 모델의 훈련을 시작한다는 의미를 가지고 있습니다.
# 위의 compile() 코드의 연장선상인 코드 model.fit(X_train, y_train, epochs=10, batch_size=32)
첫번째 인자 = 훈련 데이터에 해당됩니다.
두번째 인자 = 지도 학습에서 레이블 데이터에 해당됩니다.
epochs = 에포크, 에포크 1은 전체 데이터를 한 차례 훑고 지나갔음을 의미함. 정수값 기재 필요. 총 훈련 횟수를 정의합니다.
batch_size = 배치 크기. 기본값은 32. 미니 배치 경사 하강법을 사요하고 싶지 않을 경우에는 batch_size=None을 기재합니다.
model.fit(X_train, y_train, epochs=10, batch_size=32, verbose=0, validation_data(X_val, y_val))
validation_data(x_val, y_val) = 검증 데이터(validation data)를 사용합니다. 검증 데이터를 사용하면 각 에포크마다 검증 데이터의 정확도도 함께 출력되는데, 이 정화도는 훈련이 잘 되고 있는지를 보여줄 뿐이며 실제로 모델이 검증 데이터를 학습하지는 않습니다. 검증 데이터의 loss가 낮아지다가 높아지기 시작하면 이는 과적합(overfitting)의 신호입니다.
validation_split = validationdata 대신 사용할 수 있습니다. 검증 데이터를 사용하는 것은 동일하지만, 별도로 존재하는 검증 데이터를 주는 것이 아니라 Xtrain과 y_train에서 일정 비율을 분리하여 이를 검증 데이터로 사용합니다. 역시나 훈련 자체에는 반영되지 않고 훈련 과정을 지켜보기 위한 용도로 사용됩니다.