[인공지능] Keras 모델
- 인공지능
- 2023. 3. 3. 20:49
참조
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
'인공지능' 카테고리의 다른 글
[인공지능] TensorFlow train_test_split (0) | 2023.03.05 |
---|---|
[인공지능] TensorFlow 2.x과 1.x의 차이점 (0) | 2023.03.04 |
[인공지능] Keras 모델 생성 기본 구조 (0) | 2023.03.03 |
[인공지능] TensorFlow 데이터 분리 (0) | 2023.02.26 |
[인공지능] MNIST 모델별 Image Resize 하기 (0) | 2023.02.26 |
이 글을 공유하기