개발학습일지

[AI] 딥러닝 텐서플로우 CNN 이미지 분류 인공지능 만들기 본문

AI/Deep Learning

[AI] 딥러닝 텐서플로우 CNN 이미지 분류 인공지능 만들기

처카푸 2024. 4. 19. 17:40

텐서플로우 라이브러리를 이용해 이미지 분류 인공지능을 만들자

 

텐서플로우에서 제공해주는 fashion_mnist 를 사용

import tensorflow as tf

# 데이터 가져와서 학습용과 테스트용으로 분리
fashion_mnist = tf.keras.datasets.fashion_mnist
# 텐서플로우에서 제공해주는 순서로 저장한다
(X_train, y_train), (X_test, y_test) = fashion_mnist.load_data()

# CNN을 이용하려면 4차원으로 변경해야한다(학습용과 테스트용 둘 다 변경)
X_train = X_train.reshape(60000, 28, 28, 1)
X_train.shape 
# (60000, 28, 28, 1)
X_test = X_test.reshape(10000, 28, 28, 1)
X_test.shape 
# 10000, 28, 28)

 

CNN 모델링하고 학습과 테스트를 한다

import tensorflow as tf
from keras.models import Sequential
from keras.layers import Dense, Flatten
# 커볼루션은 Conv2D, 풀링은 MaxPooling2D 를 사용한다
from keras.layers import Conv2D, MaxPooling2D

# 모델링
def build_model():
  model = Sequential()
 
 # CNN 커볼루션
  model.add( Conv2D( filters=64, kernel_size=(3,3), activation='relu', input_shape=(28,28,1) ) )
  # CNN 풀링  _ strides=2 는 2칸씩 이동해야 겹치지 않기 때문에 2로 설정한다
  model.add( MaxPooling2D( pool_size=(2, 2), strides=2 ) )
  # 커볼루션, 풀링 반복하는 것은 선택 사항이다
  model.add( Conv2D( filters=64, kernel_size=(2,2), activation='relu' ) )
  model.add( MaxPooling2D( pool_size=(2, 2), strides=2 ) )
  
  # 기존 ANN 모델링 부분 달아주기
  model.add( Flatten() )
  model.add( Dense(128, 'relu') )
  model.add( Dense(10, 'softmax') )
  # loss =  는 y 의 값을 확인하여 작성한다
  model.compile( optimizer = 'adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'] )
  
  return model
  
# 학습
model = build_model()
early_stopping = tf.keras.callbacks.EarlyStopping(monitor='val_accuracy', patience= 10)
epoch_history = model.fit(X_train, y_train, epochs=1000, validation_split=0.2, callbacks=[early_stopping])

  
# 테스트
model.evaluate(X_test, y_test)
>>>
    313/313 [==============================] - 1s 3ms/step - loss: 0.4988 - accuracy: 0.9125
    [0.49880078434944153, 0.9125000238418579]