SW/딥러닝

47. 딥러닝 : MNIST : 모델링 및 컴파일 하는 과정, 예제, 구현

얇은생각 2020. 9. 13. 07:30
반응형

47. 딥러닝 : MNIST : 모델링 및 컴파일 하는 과정, 예제, 구현

 

패키지 임포트

import numpy as np
import tensorflow as tf

import tensorflow_datasets as tfds

 

계속 포스팅해왔던 것 처럼, 필요한 패키지를 임포트를 진행합니다. 필요한 라이브러리를 설치하고, 진행합니다.

 

 

 

데이터 전처리

mnist_dataset, mnist_info = tfds.load(name='mnist', with_info=True, as_supervised=True)
mnist_train, mnist_test = mnist_dataset['train'], mnist_dataset['test']

num_validation_samples = 0.1 * mnist_info.splits['train'].num_examples
num_validation_samples = tf.cast(num_validation_samples, tf.int64)

num_test_samples = mnist_info.splits['test'].num_examples
num_test_samples = tf.cast(num_test_samples, tf.int64)


def scale(image, label):
    image = tf.cast(image, tf.float32)
    image /= 255.
    return image, label


scaled_train_and_validation_data = mnist_train.map(scale)

test_data = mnist_test.map(scale)



BUFFER_SIZE = 10000

shuffled_train_and_validation_data = scaled_train_and_validation_data.shuffle(BUFFER_SIZE)

validation_data = shuffled_train_and_validation_data.take(num_validation_samples)

train_data = shuffled_train_and_validation_data.skip(num_validation_samples)

BATCH_SIZE = 100

train_data = train_data.batch(BATCH_SIZE)

validation_data = validation_data.batch(num_validation_samples)

test_data = test_data.batch(num_test_samples)


validation_inputs, validation_targets = next(iter(validation_data))

 

필요한 패키지를 임포트 한후, 데이터를 전처리를 진행합니다. 필요한 버퍼사이즈와, 배치사이즈를 정의하고, 데이터 역시, 셔플링을 진행하여, 골고루 분포되도록 합니다. 또, 훈련데이터, 테스트 데이터, 검증 데이터로 나누어 진행합니다. 위 내용과 코드들은 이전에 포스팅을 했던 내용이므로, 이전 포스팅을 참조해주세요.

 

 

 

모델링 방법

input_size = 784
output_size = 10
hidden_layer_size = 50
    
model = tf.keras.Sequential([
    
    tf.keras.layers.Flatten(input_shape=(28, 28, 1)), # input layer
    
    tf.keras.layers.Dense(hidden_layer_size, activation='relu'), # 1st hidden layer
    tf.keras.layers.Dense(hidden_layer_size, activation='relu'), # 2nd hidden layer
    
    tf.keras.layers.Dense(output_size, activation='softmax') # output layer
])

 

모델링은 아주 단순하게, 만들어 보았습니다. 

 

 

모델 컴파일

model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])

 

데이터와 모델을 처리했습니다. 이제 tensor flow intro 강의와 유사한 다음 필수 단계를 진행하겠습니다. 모델 객체에 대해 호출하는 컴파일 메서드를 통해 최적화 기와 손실을 지정해야합니다. 그래서 모델 컴파일을 작성하였습니다.

최선의 선택 중 하나는 적응형 모멘트 추정 또는 아담이라는 것을 알고 있습니다. 텐서플로우는 문자열을 사용하여 옵티 마이저를 정의하는 것입니다. 아담 옵티마이저를 선택합니다. 이 문자열이 대소 문자를 구분하지 않는 방식으로 아톰을 작성하기 때문에 원하는 경우 첫 글자 또는 모든 글자를 대문자로 사용할 수 있습니다.

손실 함수 역시 사용하여야 합니다. 일반적으로 엔트로피가 첫 번째 선택입니다. 그러나 텐서 플로우에도 다른 유형의 교차 엔트로피가 있습니다. 여러 엔트로피 손실의 변형이 내장되어 있습니다. 이진 교차 엔트로피 범주 교차 엔트로피 및 희소 범주입니다.

이진 교차 엔트로피는 이진 인코딩을 가지고 있는 경우를 의미하므로 이것을 하나의 범주 교차 엔트로피와 희소 범주 교차 엔트로피를 선택하지 않을 것입니다. 희소 범주 교차 엔트로피가 데이터에 하나의 핫 인코딩을 적용한다는 차이점이 있습니다. 데이터 하나는 핫 인코딩되지 않았습니다.

하지만 대상 레이어의 출력은 모델과 일치해야하며 옵티마이저는 출력 모양이 원핫 인코딩 형식의 대상 모양과 일치 할 것으로 예상합니다. 즉, 희소 범주형 교차 엔트로피를 선택해야 합니다.

마지막으로 컴파일에 세 번째 인수를 추가 할 수 있습니다. 학습 및 테스트 프로세스 전반에 걸쳐 계산하려는 메트릭을 포함 할 수 있습니다. 일반적으로 모델을 훈련하기에 좋은 것은 정확도입니다.

반응형