Easy ways

[Tensorflow] 간단한 인공지능 모델 생성 및 확인 본문

프로그램 개발/Tensorflow

[Tensorflow] 간단한 인공지능 모델 생성 및 확인

softColors 2020. 12. 24. 11:25
반응형

안녕하세요!

오늘은 텐서플로우에서 제공하는 예제를 사용해서 간단한 모델을 생성하고 테스트를 해보려고 합니다.

MNIS 데이터를 이용하여 AI 모델을 만들어보겠습니다.

간단한 예제이고 AI 모델 구조를 살펴보기에 좋기에 가져와 봤습니다.

구글 코랩같은 곳에서 한줄 씩 넣으며 테스트 해보시기를 바랍니다.

 

전체 코드


import tensorflow as tf

mnist = tf.keras.datasets.mnist

(x_train, y_train), (x_test, y_test) = mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0

model = tf.keras.models.Sequential([
  tf.keras.layers.Flatten(input_shape=(28, 28)),
  tf.keras.layers.Dense(128, activation='relu'),
  tf.keras.layers.Dropout(0.2),
  tf.keras.layers.Dense(10, activation='softmax')
])
# model.summary()

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

model.fit(x_train, y_train, epochs=5)


scores  = model.evaluate(x_test,  y_test, verbose=2)
print("정확도 : %.2f %%" % (scores[1]*100))

 

코드 설명


import tensorflow as tf

위 코드는 텐서플로우 라이브러리를 불러오고
라이브러리 이름을 tf라고 칭한다는 뜻입니다.

 


 

mnist = tf.keras.datasets.mnist

(x_train, y_train), (x_test, y_test) = mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0
tf.keras.datasets.mnist

위 코드의 의미는 tensorflow 에서 제공하는 데이터 셋인 mnist 를 불러온다는 의미입니다.
Mnist 는 손글씨 숫자에 관한 이미지 데이터 셋으로 현재 교육용으로 가장 많이 사용되고 있습니다.

각 이미지는 빨강, 파랑 및 녹색 채널에 대해 각각 32x32 픽셀로 표시됩니다.
각 픽셀의 값은 0-255입니다.

 

(x_train, y_train), (x_test, y_test) = mnist.load_data()

위 코드는 데이터에서 객체의 데이터와 라벨값을 불러오는 코드입니다.

  • x_train : 손글씨 숫자 '이미지' 대입

  • y_train : 이미지가 의미하는 숫자 대입(라벨값)

    학습 데이터의 갯수는 60000개이며, 모델을 학습할때 사용합니다.

  • x_test : 손글씨 숫자 '이미지' 대입

  • y_test : 이미지가 의미하는 숫자 대입(라벨값)

    테스트 데이터의 갯수는 10000개이며 모델의 예층 정확도 평가시 사용

  •  
x_train, x_test = x_train / 255.0, x_test / 255.0

위 코드로 데이터 값을 0–1로 정규화합니다.(흑백으로 나누는 거죠)

 

MNIST Database


이제 데이터가 준비되었으니 모델을 구성할 차례 입니다!

model = tf.keras.models.Sequential([ 
        tf.keras.layers.Flatten(input_shape=(28, 28)), 
        tf.keras.layers.Dense(128, activation='relu'), 
        tf.keras.layers.Dropout(0.2), tf.keras.layers.Dense(10, activation='softmax') 
        ]) 

model.summary()
tf.keras.models.Sequential

위 함수를 통해 뉴럴네트워크 레이어를 생성할 수 있습니다. 이 함수에 포함된 레이어들로 모델을 구성해줍니다.

 
tf.keras.layers.Flatten(input_shape=(28, 28))

위 함수는 쉽게 말해 입력레이어를 평평하게 만들어 주는 함수입니다.
다차원 배열을 일차배열로 만들어 주는 것이죠
28 x 28 배열을 입력으로 받아 1차원 배열로 변환해줍니다.

 
tf.keras.layers.Dense(128, activation='relu'),

히든레이어의 노드개수는 128개, 활성화 함수는 relu 입니다.
이 레이어에서 입력은 가중치 값과 곱해지고 더해집니다.
학습이 진행되며 이 가중치 값이 수정되어 지며 정답을 찾아가는 겁니다.

 
tf.keras.layers.Dropout(0.2),

오버피팅 방지한 것으로 이전레이어의 출력을 20% 0으로 만듭니다.

 
tf.keras.layers.Dense(10, activation='softmax')

숫자는 0부터 9까지 총 10개의 라벨값을 가지므로
모델의 출력은 10개입니다.
활성화 함수는 softmax로 다중 클래스 분류 문제의 출력층에서 주로 쓰이는 모델입니다.

이 모델을 그림으로 표현하면 다음과 같습니다.

 

 

 


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

완성된 모델을 컴파일 해줍니다

model.fit(x_train, y_train, epochs=5)

 

model.fit(x_train, y_train, epochs=5)

Mnist 데이터 셋에서 훈련데이터 셋을 사용하고
epochs를 5로 설정하여 모델을 5번 반복하여 훈련합니다.

scores  = model.evaluate(x_test,  y_test, verbose=2)
print("정확도 : %.2f %%" % (scores[1]*100))

 

model.evaluate(x_test, y_test, verbose=2)

MNIST의 테스트 데이터를 사용하여 모델 정확도를 계산해 줍니다.

MNIST 데이터 셋을 사용한 AI 모델 결과 출력

 

코드를 실행하면 그림과 같이 출력됩니다.

정확도가 97.73%나 되는군요!

 

 

인공지능 모델 학습은 위와 같은 구조에서 크게 벗어나지 않습니다.

데이터 셋을 구성하고

모델을 구성한뒤

학습하고 테스트하는 것이죠!

 

 

이상입니다. 감사합니다.

 

 

참조
https://www.tensorflow.org/tutorials/quickstart/beginner

반응형
Comments