텐서플로우에서 지원하는 fashion_mnist 데이터를 이용해 10개의 패션이미지를 분류하는 ANN을 만들어보자.
fashion_mnist 참고: https://github.com/zalandoresearch/fashion-mnist#labels
1. 데이터 가져오기
import tensorflow as tf
mnist = tf.keras.datasets.fashion_mnist
# 이런 형식으로 불러오도록 정해져있다.
(X_train, y_train),(X_test, y_test) = mnist.load_data()
plt.imshow(X_train[200], cmap='gray')
plt.show()
y_train[200]
결과는 8이 나온다. 위의 레이블을 참고하면 bag이란 걸 알 수 있다.
2. 학습이 잘 되도록 0과 1사이의 값으로 nomalizing
- 이미지는 0~255 사이의 숫자로 이루어져 있으므로, 255로 나누기만 하면 된다.
X_train = X_train / 255.0
X_train = X_train / 255.0
3. 모델링
from keras.models import Sequential
from keras.layers import Dense
from keras.layers import Flatten
def build_model():
model = Sequential()
model.add(Flatten())
model.add(Dense(128, 'relu'))
model.add(Dense(64, 'relu'))
model.add(Dense(10, 'softmax'))
model.compile('adam', 'sparse_categorical_crossentropy', ['accuracy'])
return model
흑백이미지는 (28 X 28) 행렬이기 때문에 ANN에 input 하려면 1차원으로 만들어줘야 한다.
텐서플로우에서는 2차원 데이터를 자동으로 1차원으로 평탄화 해주는 Flatten() 함수를 지원한다.
Flatten layer는 input_shape을 알려줄 필요가 없다.
Flatten()을 안 쓰고 직접 reshape으로 바꿔줘도 된다.
3개 이상 분류 문제의 activation function은 softmax를 사용하고,
3개 이상 분류 문제의 레이블이 레이블 인코딩으로 되어 있으므로,
loss function으로 sparse_categorical_crossentropy를 사용한다.
(* 3개 이상 분류 문제의 레이블이 원핫인코딩 되어 있으면 categorical_crossentropy 사용)
4. 모델 학습
model = build_model()
model.fit(X_train, y_train, epochs=5)
5. 모델 평가
model.evaluate(X_test, y_test)
6. 결과 해석
ANN의 output의 노드가 10개이기 때문에,
softmax 활성화 함수를 통해 나온 output은 각각 10개의 값을 가진 리스트이다.
이는 각 레이블일 확률을 의미한다. 확률이기 때문에 10개를 더하면 1이 된다.
argmax() 함수를 이용해서 확률이 가장 높은 인덱스를 찾을 수 있는데,
그 인덱스가 바로 예측한 레이블이다.
y_pred = model.predict(X_test)
# 각 행의 모든 확률의 합은 1
y_pred[100].sum()
# 확률이 가장 큰 인덱스 찾기
y_pred[100].argmax()
y_pred 전체를 레이블 인코딩으로 바꾸고 싶으면 argmax 함수에 axis=1을 지정해줘야 한다.
y_pred.argmax(axis=1)
confusion matrix
y_pred = y_pred.argmax(axis=1)
cm = confusion_matrix(y_test, y_pred)
# confusion matrix를 차트로 나타내자.
import seaborn as sb
sb.heatmap(cm, annot=True, fmt='.0f', cmap='RdPu')
plt.show()
'Machine Learning > Deep Learning' 카테고리의 다른 글
Tensorflow - Overfitting, Underfitting 개념 (0) | 2022.12.29 |
---|---|
Tensorflow - ANN 분류 모델 activation, loss 함수 설정 방법 (0) | 2022.12.29 |
Tensorflow - 콜백 EarlyStopping 사용법 (0) | 2022.12.29 |
Tensorflow - Validation(검증)을 사용하는 방법 (0) | 2022.12.29 |
Tensorflow - Learning rate(학습률)을 설정하는 방법 (0) | 2022.12.29 |