이미 케라스 메델의 예로 MNIST 예제를 보았습니다. 전형적인 케라스 작업 흐름은 이 예제와 비슷합니다.
1) 입력 텐서와 타깃 텐서로 이루어진 훈련 데이터를 정의합니다.
2) 입력과 타깃을 매핑하는 층으로 이루어진 네트워크(또는 모델)를 정의 합니다.
3) 손실 함수, 옵티마이저, 모니터링하기 위한 측정 지표를 선택하여 학습 과정을 설정합니다.
4) 훈련 데이터에 대해 모델의 fit()메서드를 반복적으로 호출합니다.
모델을 정의하는 방법은 두 가지인데, Sequential 클래스(가장 자주 사용하는 구조인 층을 순서대로 쌓아 올리 네트워크입니다)또는 함수형 API(완전히 임의의 구조를 만들 수 있는 비순환 유향 그래프를 만듭니다)를 사용합니다.
Sequential 클래스를 사용하여 정의한 2개의 층으로 된 모델을 다시 보겠습니다(첫 번째 층에 입력 데이터의 크기가 전달된 점을 주목하세요).
from keras import models
from keras import layers
model = models.Sequential()
model.add(layers.Dense(32, activation='relu', input_shape=(784,)))
model.add(layers.Dense(10, activation='softmax'))
같은 모델을 함수형 API를 사용하여 만들어 보겠습니다.
input_tensor = layers.Input(shape=(784,))
x = layers.Dense(32, activation='relu')(input_tensor)
output_tensor = layers.Dense(10, activation='softmax')(x)
model = model.Model(input_tensor, outputs=output_tensor)
함수형 API를 사용하면 모델이 처리할 데이터 텐서를 만들고 마치 함수처럼 이 텐서에 층을 적용합니다.
모델 구조가 정의된 후에는 Sequential모델을 사용했는지 함수형 API를 사용했는지는 상관 없습니다. 이후 단계는 동일합니다.
컴파일 단계에서 학습 과정이 설정 됩니다. 여기에서 모델이 사용할 옵티마이저와 손실 함수, 훈련하는 동안 모니터링하기 위해 필요한 측정 지표를 지정합니다. 다음이 하나의 손실 함수를 사용하는 가장 흔한 경우의 예입니다.
from keras import optimizers
model.compile(optimizer=optimizers.RMSorop(lr=0.01),
loss='mse',
metrics=['accuracy'])
마지막으로 입력 데이터의 넘파이 배열을 (그리고 이에 상응하는 타깃 데이터를)모델의 fit()메서드에 전달함으로써 학습 과정이 이루어집니다. 이는 사이킷런(Sckit-Learn)이나 몇몇 다른 머신러닝 라이브러리에서 하는 방식과 비슷합니다.
model.fit(input_tensor, target_tensor, batch_size=128, epochs=10)
다음 몇 개의 장에서 여러 네트워크 구조가 각기 다른 문제에 어떻게 적용되는지, 어떻게 적합한 학습 설정을 선택하는지, 만족할 만한 결과를 얻기 위해 어떻게 모델을 수정하는지 설명하겠습니다. 3.4절, 3.5절, 3.6절에서 이진 분류, 다중 분류, 회귀에 대한 기초적인 세 가지 예를 살펴보겠습니다.
댓글 없음:
댓글 쓰기