keras와 모델

Vorhandenheit ·2023년 3월 4일
0

MachineLearning

목록 보기
6/7

keras와 모델

1. 모델 종류

(1) 순차 모델

순차적인 층으로 구성돼 있고 하나의 입력츠응로 시작해 하나의 출력층으로 끝나는 모델

tf.keras.layers.Dense(units=52, activaton='relu', input_shape=(13,))
  • units : 해당 은닉층에 활동하는 뉴런의 수
  • activation : 활성화 함수, 해당 은닉층의 가중치와 편향의 연산 결과를 어느 함수에 적용하여 출력
  • input_shape : 입력 벡터의 크기

예시

import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
from tensorflow.keras import Input

model = Sequential()
model.add(Input(shape=(28, 28)))
model.add(Dense(32, activation='relu'))
model.add(Dense(16, activation='relu'))
model.add(Dense(10, activation='softmax'))

model.summary()

(2) 함수형 API

다중 입력층과 다중 출력층이 가능한 모델, 프로그래밍의 함수와 같이 모델의 입출력을 함수의 형태로 구별해 다양한 구조의 모델을 쉽고 빠르게 구현할 수 있음

예시

from tensorflow.keras import Model
from tensorflow.keras.layers import concatenate
from tensorflow.keras.utils import plot_model
input_image = Input(shape=(784,), name='input_image')
input_csv = Input(shape=(13,), name='input_csv')

x1 = Dense(units=32, activation='relu', name='layer10')(input_image)
x1 = Dense(units=16, activation='relu', name='layer11')(x1)
output_image = Dense(units=10, activation='softmax', name='output_image')(x1)

x2 = Dense(units=16, activation='relu', name='layer20')(input_csv)
x2 = Dense(units=8, activation='relu', name='layer21')(x2)
output_csv = Dense(units=1, activation='sigmoid', name='output_csv')(x2)

x3 = concatenate([output_image, output_csv], name='layer30')
output = Dense(8, activation='sigmoid', name='output')(x3)

model=Model([input_image, input_csv], output, name='MODEL:Multiple Inputs')
model.summary()
plot_model(model, "mnist-model.png", show_shapes=True)

다중 입력을 해서 하나의 출력을 할 수도 있고, 한 입력에서 다중 출력을 할 수도 있습니다.

(3) 서브 클래싱

케라스의 모델 클래스를 상속받은 후 사용자가 세부적인 동작을 수정해 구현할 수 있는 방법

from tensorflow.keras import Model

class MnistModel(tf.keras.model):
    def __init__(self):
        super(MnistModel, self).__init__()
        self.layers1 = Dense(32, activation='relu')
        self.layers2 = Dense(16, activation='relu')        
        self.layers3 = Dense(10, activation='softmax')
        
    def call(self, x):
        x = self.layers1(x)
        x = self.layers2(x)
        x = self.layers3(x)
        return x
    
model = MnistModel()
model(Input(shape=(784,)))
model.summary()

2. 모델 컴파일

모델을 구성한 후에 학습하기 위해서는 컴파일을 진행해야합니다. 모델 컴파일이란 학습에 필요한 옵티마이저, 손실함수, 평가 지표를 설정하는 과정을 말합니다.

model.compile(optimizer='adam', loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
  • optimizer : 경사하강법을 어떤 방법으로 사용할지 정함

  • loss : 모델이 훈련되는 동안 최소화될 값으로 주어진 문제에 대한 성공 지표

  • metrics : 모니터링할 지표

3. 모델 학습

from tensorflow.keras import datasets
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Flatten, Dense

mnist = datasets.mnist
(x_train, y_train), (x_test, y_test) = mnist.load_data()
x_train, x_test = x_train / 255, x_test/255

model = Sequential([
    Flatten(input_shape=(28, 28)),
    Dense(32, activation='relu'),
    Dense(16, activation='relu'),
    Dense(10, activation='softmax'),
])
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])

model.fit(x=x_train, y=y_train, epochs=1)

콜백 사용

모델의 학습 과정 중에 모델의 시작과 끝, epochs의 시작과 끝, 배치의 시작과 끝에 호출할 수 있는 함수

  • EarlyStopping : 과대적합을 방지하기 위해 사용
from tensorflow.keras.callbacks import EarlyStopping

callback_EarlyStopping = EarlyStopping(monitor='val_loss', patience=5, verbose=1)

history = model.fit(x_train, y_train, validation_split=0.2, epochs=20, batch_size=1, callbacks=callback_EarlyStopping, verbose=1)
  • ModelCheckpoint : 학습 시 모델 정보 및 가중치를 저장하는 콜백
from tensorflow.keras.callbacks import EarlyStopping

callback_ModelCheckpoint = ModelCheckpoint(filepath='./ModelCheckpoint', monitor='val_loss', save_weights_only=True, save_best_only=True, verbose=1)

history = model.fit(x_train, y_train, validation_split=0.2, epochs=20, batch_size=1, callbacks=[callback_ModelCheckpoint], verbose=1)
  • TensorBoard : 텐서보드를 사용한 손실 및 정확도를 추적, 시각화 할 수 있음
from tensorflow.keras.callbacks import EarlyStopping

callback_TensorBoard = TensorBoard(log_dir='./logs', profile_batch=5)

history = model.fit(x_train, y_train, validation_split=0.2, epochs=20, batch_size=1, callbacks=[callback_TensorBoard], verbose=1)

4. 모델 평가

profile
읽고 기록하고 고민하고 사용하고 개발하자!

0개의 댓글