[딥러닝] Tensorflow 2.x 실습
tf.keras 를 활용해 1.x에서 사용했던 데이터셋인 MNIST를 사용하여 같은 classification이지만 훨씬 간단하게 구현할 수 있었습니다.
특히 사용자가 일일이 tf.Session() 을 통해 실행 후 종료시켜줘야했던 것과 달리 2.x에서는 간단하게 실행한 후 신경쓰지 않아도 됩니다.
keras에서 구현할 수 있는 모델에는 두 가지 종류가 있습니다.
sequential : 레이어를 순차적으로 구현할 수 있어 이해하기에 직관적이고 따라서 에러가 적습니다.
functional : 함수형 API에서는 레이어가 중간에 두 개로 갈라진다거나 하는 등 모델이 복잡할 때 활용할 수 있습니다.
1. 데이터 전처리
- keras에서 datasets에서 불러올 수 있는 MNIST set을 각각 train/test로 불러오고,
- 0~255로 구성되어 있는 숫자들을 모두 255로 나누어 scaling 해줍니다
- One-hot encoding을 통해 4, 6, 7 등으로 레이블링되어 있는 데이터를 (0,0,0,1,0,0,0,0,0) 와 같이 변환해줍니다. softmax 함수에서는 10개의 클래스 중 '4'일 확률이 가장 높을 경우 네 번째 결괏값이 가장 클 것입니다.
2. 모델 만들기
1.x 버전의 tensorflow와 다른 점은 layer들을 구현해준 뒤 model.compile()을 통해 컴퓨터에서 사용자가 만든 모델을 이해할 수 있도록 포장(?)해주어야 한다는 점입니다.
model.compile() 에는 optimzer, loss function의 종류 및 evaluation 방법 등을 지정할 수 있습니다.
input layer를 포함해 한 레이어에서 다음 레이어로 넘어갈 때, parameter의 개수는 $ Number \ of \ input \ columns \times Number \ of \ nodes + Number \ of \ nodes (bias) $ 입니다.
3. 학습
training 단계에서는 mini-batch를 설정할 경우의 batch size와, epoch 수를 설정하여 모델에게 몇 번의 전체 데이터셋 학습을 시켜줄 것인지 설정할 수 있습니다. 이 때 validation 성능을 확인하여 몇 번의 epoch 에서 오버피팅 현상이 관찰되는지 주의할 필요가 있습니다.