패키지 임포트
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 강의와 유사한 다음 필수 단계를 진행하겠습니다. 모델 객체에 대해 호출하는 컴파일 메서드를 통해 최적화 기와 손실을 지정해야합니다. 그래서 모델 컴파일을 작성하였습니다.
최선의 선택 중 하나는 적응형 모멘트 추정 또는 아담이라는 것을 알고 있습니다. 텐서플로우는 문자열을 사용하여 옵티 마이저를 정의하는 것입니다. 아담 옵티마이저를 선택합니다. 이 문자열이 대소 문자를 구분하지 않는 방식으로 아톰을 작성하기 때문에 원하는 경우 첫 글자 또는 모든 글자를 대문자로 사용할 수 있습니다.
손실 함수 역시 사용하여야 합니다. 일반적으로 엔트로피가 첫 번째 선택입니다. 그러나 텐서 플로우에도 다른 유형의 교차 엔트로피가 있습니다. 여러 엔트로피 손실의 변형이 내장되어 있습니다. 이진 교차 엔트로피 범주 교차 엔트로피 및 희소 범주입니다.
이진 교차 엔트로피는 이진 인코딩을 가지고 있는 경우를 의미하므로 이것을 하나의 범주 교차 엔트로피와 희소 범주 교차 엔트로피를 선택하지 않을 것입니다. 희소 범주 교차 엔트로피가 데이터에 하나의 핫 인코딩을 적용한다는 차이점이 있습니다. 데이터 하나는 핫 인코딩되지 않았습니다.
하지만 대상 레이어의 출력은 모델과 일치해야하며 옵티마이저는 출력 모양이 원핫 인코딩 형식의 대상 모양과 일치 할 것으로 예상합니다. 즉, 희소 범주형 교차 엔트로피를 선택해야 합니다.
마지막으로 컴파일에 세 번째 인수를 추가 할 수 있습니다. 학습 및 테스트 프로세스 전반에 걸쳐 계산하려는 메트릭을 포함 할 수 있습니다. 일반적으로 모델을 훈련하기에 좋은 것은 정확도입니다.
'SW > 딥러닝' 카테고리의 다른 글
49. 딥러닝 : MNIST : 훈련 모델 백테스팅 하는 방법, 예제, 구현 (0) | 2020.09.15 |
---|---|
48. 딥러닝 : MNIST : 데이터 나누어서 훈련 진행, 예제, 구현 (0) | 2020.09.14 |
46. 딥러닝 : MNIST : 훈련을 위해 데이터를 모델링 하는 방법, 예제 (0) | 2020.09.12 |
45. 딥러닝 : MNIST : 훈련을 위해 데이터를 분류하는 방법, 구현 (0) | 2020.09.11 |
44. 딥러닝 : MNIST 분류 예제, 구현 : 데이터 전처리 (0) | 2020.09.05 |