# 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]] = validation_data 대신 사용할 수 있습니다. 검증 데이터를 사용하는 것은 동일하지만, 별도로 존재하는 검증 데이터를 주는 것이 아니라 X_train과 y_train에서 일정 비율을 분리하여 이를 검증 데이터로 사용합니다. 역시나 훈련 자체에는 반영되지 않고 훈련 과정을 지켜보기 위한 용도로 사용됩니다. ### 평가(Evaluation)와 예측(Prediction) ## 문서 - [[keras 강좌]] - [[Deep Learning with Keras]] - [[Keras 빨리 훑어보기]] - [[Keras Documentation]] - [[keras_기본문법]] ## 링크 - [케라스 LSTM 모델로 작곡하기](https://tykimos.github.io/2018/09/14/How_to_Generate_Music_using_a_LSTM_Neural_Network_in_Keras/) - https://tykimos.github.io/lecture/ - http://course.fast.ai/ - http://iostream.tistory.com/111 - https://datascienceschool.net/view-notebook/1d93b9dc6c624fbaa6af2ce9290e2479/