[인공지능] Keras 모델

참조


Keras 모델이란?

  • Keras를 이용해서 딥러닝을 설계를 할때, 설계도 자체를 모델이라고 표현합니다.
  • Keras에서 모델은 크게 3가지로 구성되어 있습니다.
    • 네트워크(Network)
    • 목표함수(Objective Function)
    • 최적화기(Optimizer)
  • 모델 설계도를 제작하기 위해서 Keras 모델에서 Sequential을 불러옵니다. Sequential의 뜻은 순차적, 연속적이라는 뜻입니다. 이것은 MLP 레이어가 순차적으로 쌓여가는 것을 의미합니다.
from keras.models import Sequential
model = Sequential()

MLP 레이어란 ? Multi-Layer Perceptron 다층 퍼세트론으로써, 퍼셉트론으로 이루어진 층(layer) 여러 개를 순차적으로 붙여놓은 형태입니다.(https://deepestdocs.readthedocs.io/en/latest/004_deep_learning_part_2/0040/)

  • 네트워크인 머리 층은 뇌, Perceptron을 설계 하는 과정입니다.
  • 입력값에 따른 출력값이 있게 됩니다. 어떻게 학습을 할 것이냐는 문제를 설계하는 것입니다.
  • 이 문제를 어떻게 학습할래? 라는 알고리즘 설계와 같습니다.
  • 다음 식에서 첫 번째 인자는 출력 뉴런 수를 설정합니다. input_dim은 입력 뉴런의 수를 설정합니다. activation은 활성화 함수를 설정합니다.
  • activation에서 쓰이는 linear은 디폴트 값으로, 입력뉴런과 가중치로 계산된 결과 값이 그대로 출력으로 나옵니다.
  • relu는 은닉층에 주로 쓰이는 함수이고, sigmod는 이진 분류 문제에서 출력층에 주로 쓰입니다.
  • softmax는 다중 클래스분류 문제에서 출력층에 주로 쓰입니다.
from keras.layers import Dense
model.add(Dense(units=64, activation='relu', input_dim=100))
model.add(Dense(units=64, activation='softmax'))
  • 몸층인 목표함수는 어떤 결과 값을 취할 것인가 입니다.
  • 모델의 정확도를 판단하는 기준입니다.
  • 네트워크는 모델을 어떻게 짜느냐이고, 모델을 짰을 때 성능을 어떻게 판단할래? 라는 것입니다.
  • Cost Function의 내용이며, 예측값과 실제 값의 차이를 판단하여 모델의 정확도(성능)을 판단하게 됩니다.
    • mean_squared_error - 수치 예측 : 내일의 교통량, 내일의 기온, 내일의 미세먼지 농도 등을 예측할 때 주로 사용합니다.
    • binary_crossentropy - 이진 분류 : 남자와 여자, 개와 고양이 이렇게 두 가지로 분류가 필요할 때 주로 사용합니다.
    • categorical_crossentropy - 다중 분류 : 여러 동물들 중 강아지, 고양이, 너구리와 같이 여러가지로 분류가 필요할 때 사용합니다.

  • 마지막 최적화기는 해당되는 값이 틀렸을 때, 어떤 방식으로 값을 수정할 것이냐 입니다.
  • 군대에서 문제를 틀리면 연병장 10바퀴 돌 듯이 Optimizer가 돌면서 다시 하게 됩니다.
  • 그리고 이것을 컴파일 해야 하나의 모델이 비로소 완성되는 것입니다.
model.compile(loss='mean_squared_error', optimizer='sgd' metrics=['accuracy'])
  • 입력값과 출력값의 형태를 결정하는 것은 머리층이라면, 출력값을 어떤 방식으로 할 것이냐가 몸통이고, 출력값이 틀렸을 때 어떤 방식으로 수정할 것이냐가 최적화기 입니다.

Keras 제공 모델

  • Keras가 제공하는 모델에는 Sequential 모델과 함수형 API와 함께 사용되는 Model 클래스 두 가지 종류가 있습니다.

keras 모델의 메서드 및 속성

  • model.layers : 모델을 구성하는 층들이 저장된 1차원 리스트 입니다.
  • model.inputs : 모델의 입력 텐서들이 저장된 1차원 리스트 입니다.
  • model.outputs : 모델의 출력 텐서들이 저장된 1차원 리스트 입니다.
  • model.summary() : 모델의 구조를 요약해 출력해 줍니다. utils.print_summary(model) 로도 동일한 출력을 얻을 수 있습니다.
  • model.get_config() : 모델의 설정이 저장된 딕셔너리를 반환합니다. 모든 모델은 다음과 같이 설정 내용으로부터 다시 인스턴스화 될 수 있습니다.
config = model.get_config()
model = Model.from_config(config)
# 또는, Sequential 모델의 경우
model = Sequential.from_config(config)
  • model.get_weights() : 모델의 가중치 텐서들이 NumPy 배열로 저장된 1차원 리스트입니다.
  • model.set_weights((weights) : 모델의 가중치 값을 NumPy 배열의 리스트로부터 설정합니다. 리스트에 있는 배열들의 크기는 get_weights()로 부터 반환된 것과 동일해야 합니다.
  • model.to_json() : 모델의 구조를 JSON 문자열로 반환합니다. 이때, 모델의 가중치는 제외되고 오로지 구조만이 포함됩니다. 이 JSON 문자열로부터 다음과 같이 동일한 모델을 다시 인스턴스화 할 수 있습니다.
from keras.models import model_from_json

json_string = model.to_json()
model = model_from_json(json_string)
  • model.to_yaml() : 모델의 구조를 YAML 문자열로 반환합니다. 이때, 모델의 가중치는 제외되고 오로지 구조만이 포함됩니다. 이 YAML 문자열로부터 다음과 같이 동일한 모델을 다시 인스턴스화 할 수 있습니다.
from keras.models import model_from_yaml

yaml_string = model.to_yaml()
model = model_from_yaml(yaml_string)
  • model.save_weights(filepath) : 모델의 가중치를 HDF5 파일로 저장합니다.
  • model.load_weights(filepath, by_name=False) : 모델의 가중치를 HDF5 파일로부터 불러옵니다. 기본 설정인 by_name=False는 모델과 가중치 파일의 네트워크 구조가 동일하다고 가정합니다. 만약 구조가 다르다면, by_name=True를 사용해 동일한 이름을 가진 층들에 대해서만 가중치를 불러올 수도 있습니다.
728x90

이 글을 공유하기

댓글

Designed by JB FACTORY