MACHINE | DEEP LEARNING/Deep Learning Project
[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]