개발학습일지

[AI] 딥러닝 ANN 텐서플로우 이미지 분류하기 본문

AI/Deep Learning

[AI] 딥러닝 ANN 텐서플로우 이미지 분류하기

처카푸 2024. 4. 18. 16:20

이미지를 분류하는 인공지능을 만들어보자

 

데이터셋 : TensorFlow keras datasets API에 들어있는 Fashion MNIST데이터

import numpy as np
import tensorflow as tf
from tensorflow.keras.datasets import fashion_mnist

mnist = tf.keras.datasets.fashion_mnist

 

텐서플로우에서 사진을 넘파이로 변환해 둔 데이터 트레이닝셋과 테스트셋 가져온다

(X_train, y_train), (X_test, y_test) = mnist.load_data()

X_train.shape
# (60000, 28, 28)

X_test.shape
# (10000, 28, 28)

 

데이터의 들어있는 사진 확인하는 방법

- pyplot의 imshow() 사용

import matplotlib.pyplot as plt

plt.imshow(X_test[0, : , : ], cmap='gray')
plt.show()

 

피처스케일링 , 노말라이징(normalizing)

- 피처스케일링 해야 하는데 최댓값을 이미 알고 있으니 이미지의 최댓값으로 나눠도 된다

X_train = X_train / 255.0
X_test = X_test / 255.0
# 255.0 에서 .0 은 상수로 만들어 주기 위함이다

 

Flatten 라이브러리로 평탄화하기

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Flatten
from types import MethodWrapperType

def build_model():
  model = Sequential()
  model.add(Flatten())
  model.add(Dense(128, 'relu'))
  model.add(Dense(10, 'softmax'))
  model.compile('adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
  return model
  
model = build_model()

 

학습 시키기 _ earlt stop을 이용해서 fit()하기

early_stop = tf.keras.callbacks.EarlyStopping(monitor='val_loss', patience=10)
epoch_history = model.fit(X_train, y_train, epochs= 1000, validation_split=0.2, callbacks=[early_stop])

 

나온 결과를 확인 정확도가 몇인지 확인한다

model.evaluate(X_test, y_test)

 

테스트데이터로 데이터 예측시켜 변수에 저장한다

y_pred = model.predict(X_test)

 

컨퓨전매트릭스를 이용해서 인공지능이 헷갈려 하는 부분을 파악한다

- argmax() 함수를 이용해서 y_pred 값 정리하기

from sklearn.metrics import confusion_matrix

# argmax() 함수를 이용해 레이블 인코딩
y_pred = y_pred.argmax(axis=1)

# confusion_matrix(행, 열)
cm = confusion_matrix(y_test, y_pred)
cm

confusion_matrix

- 대각선 값만 더해서 전체 합한 값으로 나눠주면 정확도가 구해진다

# prompt: 넘파이 써서 cm 변수의 대각선 값 더해줘

import numpy as np

np.diagonal(cm).sum() / cm.sum()
# 0.8768