본문 바로가기
Book Review/[케라스 창시자에게 배우는 딥러닝] 리뷰

keras API를 통한 간단한 딥러닝 모델 만들기

by 3n952 2022. 12. 5.

이전 포스팅에서는 딥러닝을 위해 필요한 기본적인 개념들에 대해 알아보았습니다.

이번에는 딥러닝이 이뤄지는 구조를 알아보고, 그 구조를 직접 예제를 통해 구현해보는 시간을 가져보겠습니다.


 

딥러닝의 구조는 다음 그림1과 같습니다.

층이 서로 연결되어 모델을 구성하고, 모델은 입력데이터로 예측을 합니다. 그 다음 예측과 실제 값을 비교하여 손실 값을 계산하고(모델이 얼마나 잘 예측했는지 파악함), 옵티마이저를 통해 이 손실값을 최소화하는 방향으로 모델의 가중치를 업데이트 하는 것입니다.

 

그림1) 모델, 층, 손실함수, 옵티마이저 사이의 관계

 

이러한 구조를 keras API를 사용하여 구현해보겠습니다.

from tensorflow import keras
from tensorflow.keras.datasets import mnist

우선, keras와 mnist데이터를 임포트해줍니다.

 

이후, 데이터를 훈련세트와 테스트세트로 나눠주고, 이미지처리에 관행적으로 전처리하는 과정을 추가해줍니다.

이해가 안된다면 이미지 처리를 위해 reshape를 해주고 ,효율적인 이미지 처리를 위해  / 255를 해준다고 생각해주면 됩니다. 

코드는 다음과 같습니다.

#입력데이터 만들기
(train_images, train_labels), (test_images, test_labels) = mnist.load_data()

#넘파이 배열 크기를 조정
train_images = train_images.reshape((60000,28*28)) 
test_images = test_images.reshape((10000, 28*28))

#이미지 데이터 처리를 효율적으로 하기위해 255로 나눠줌.
train_images = train_images / 255
test_images = test_images / 255

 

이후 신경망 층의 구조를 만들어줘야합니다.

keras.Sequential()을 사용하여 Dense층(밀집층)을 각각 만들어줍니다.

이 때 필요한 것은, 입력으로 들어오는 노드의 수, 활성화함수 등이 있습니다.

코드는 다음과 같습니다.

#모델구현
model = keras.Sequential([
    keras.layers.Dense(512, activation = 'relu'),
    keras.layers.Dense(10, activation = 'softmax')
])

여기서는 512개의 입력노드를 받는 dense층이 relu활성화함수를 통해 나가는 층 하나,

위의 층에서 나온(앞 dense층의 출력) 10개의 입력노드를 받는 dense층이 softmax활성화함수를 통해 출력되는 구조로 이뤄져있습니다.

 

모델의 구조를 만들었으면 모델을 compile(컴파일)해야합니다. 

compile단계에서는 손실함수, 옵티마이저 등을 지정해주는 단계입니다.

코드는 다음과 같습니다.

#모델 컴파일
model.compile(
    optimizer = 'rmsprop',
    loss = 'sparse_categorical_crossentropy',
    metrics = ['accuracy']
)

sparse_categorical_crossentropy를 손실함수로, rmsprop을 옵티마이저로 컴파일했습니다.

metrics=['accuracy']는 모델을 학습시킬 때 에포크당 정확도를 보여주기 위함입니다.

 

 

마지막은 모델을 데이터로 학습시키는 것입니다.

모델의 학습이 끝나면 딥러닝 모델이 완성되는 것입니다!

이 때 필요한 에포크, 배치사이즈는 하이퍼파라미터로 사용자가 직접 지정해줘야 합니다.

효율적인 에포크, 배치사이즈를 찾는 것도 중요한 요소중 하나 입니다.

코드는 다음과 같습니다.

#모델 훈련
model.fit(train_images, train_labels, epochs = 5, batch_size = 128)

여기서는 fit메서드를 호출하면 128개의 샘플의 미니 배치로 훈련 데이터 전체를 5번 반복하여 학습한다는 것을 의미합니다.

 

 

이번 포스트에서는 keras API로 간단한 딥러닝 모델을 구현해보았습니다.

다음 포스트에서는 직접 그 모델을 구현하여 파트별로 더욱 자세히 이해보도록 하겠습니다.