본문 바로가기

프로그래밍 일반/딥러닝

[딥러닝] 케라스의 기초 개념

케라스를 이용해서 딥러닝을 설계를 할 때, 설계도 자체를 모델이라고 표현합니다.

이 모델은 네트워크, 목표함수, 최적화기로 구성이 됩니다. 

 

모델, 설계도를 제작하기 위해서 케라스 모델에서 Sequential을 불러옵니다. Sequential의 뜻은 순차적, 연속적이라는 뜻입니다. 이것은 MLP의 레이어가 순차적으로 쌓여가는 것을 의미합니다.

from keras.models import Sequential
model = Sequential()

 

 

네트워크인 머리 층은 뇌, Perceptron을 설계하는 과정입니다. 입력값에 따른 출력값이 있게 됩니다. 어떻게 학습을 할 것이냐는 문제를 설계하는 것입니다. 이 문제를 어떻게 학습할래?라는 알고리즘 설계와 같습니다.

from keras.layers. import Dense
model.add(Dense(units=64, activation='relu', input_dim=100))
model.add(Dense(units=64, activation='softmax'))

이 식에서 첫번째 인자는 출력 뉴런 수를 설정합니다. input_dim은 입력 뉴런의 수를 설정합니다. activation은 활성화 함수를 설정합니다. 

activation에서 쓰이는 linear은 디폴트 값으로, 입력뉴런과 가중치로 계상된 결과값이 그대로 출력으로 나옵니다.

relu는 은닉층에 주로 쓰이는 함수이고, sigmoid는 이진 분류 문제에서 출력층에 주로 쓰입니다. softmax는 다중 클래스분류 문제에서 출력층에 주로 쓰입니다.

 

몸층인 목표함수는 어떤 결과 값을 취할 것인가입니다. 모델의 정확도를 판단하는 기준이다. 네트워크는 모델을 어떻게게 짜느냐이고, 모델을 짰을 때 성능을 어떻게 판단할래? 라는 것이다. Cost Function의 내용이며, 예측값과 실제 값의 차이를 판단하여 모델의 정확도(성능)을 판단하게 됩니다.

 

mean_squared_error은 오차값에 대한 함수가 몸통에 들어가게 된다. 어떤 함수를 보고 그 기준을 정할 것인지 나온다. 

Model은 네트워크가 똑같다고 하더라도 목표함수가 다르다. mean_squared_error은 특정한 값을 예측할 때 쓰인다. 이 함수로 어떤 하나를 선택하는 classification을 쓸 거야. 이진분류를 할 때는 binary_crossentropy를 쓴다.
값을 예측할 거야, 여러개로 분류할 꺼야, 이진분류를 할 꺼야의 문제인 몸통을 반드시 정해줘야 한다.

 

마지막 최적화기는 해당되는 값이 틀렸을 때, 어떤 방식으로 값을 수정할 것이냐이다. 군대에서 문제를 틀리면 연병장 10바퀴 돌 듯이 Optimizer가 돌면서 다시 하게 된다.

그리고 이것을 컴파일 해야 하나의 모델이 완성되는 것이다.

model.compile(loss='mean_squared_error', optimizer='sgd' metrics=['accuracy'])

입력값과 출력값의 형태를 결정하는 것이 머리층이라면, 출력값을 어떤 방식으로 할 것이냐가 몸통이고, 출력값이 틀렸을 때 어떤 방식으로 수정할 것이냐가 최적화기이다.