드레:
코딩 뿌시기
드레:
전체 방문자
오늘
어제
  • 분류 전체보기 (268)
    • Python (74)
      • Python 기초 (42)
      • Numpy (8)
      • Pandas (22)
    • Machine Learning (31)
      • Machine Learning (1)
      • Deep Learning (27)
    • AWS (22)
      • RDS (3)
      • EC2 (9)
      • Lambda (8)
      • S3 (2)
    • MySQL (24)
    • Git (8)
    • Streamlit (12)
    • REST API (22)
    • Java (24)
    • Android (36)
    • Debugging (15)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • AWS
  • pandas
  • 안드로이드 스튜디오
  • 서버리스
  • Callback
  • GET
  • serverless
  • Python
  • Java
  • 깃이그노어
  • EC2
  • volley
  • tensorflow
  • Ann
  • CNN
  • Lambda
  • 액션바
  • 네이버 API
  • JWT
  • Retrofit2
  • Transfer Learning
  • flask
  • fine tuning
  • aws s3
  • API
  • AWS Lambda
  • rest api
  • github
  • 딥러닝
  • Streamlit

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
드레:

코딩 뿌시기

Tensorflow - 3개 이상 분류 문제의 인공신경망(ANN)
Machine Learning/Deep Learning

Tensorflow - 3개 이상 분류 문제의 인공신경망(ANN)

2022. 12. 29. 21:16

텐서플로우에서 지원하는 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
    'Machine Learning/Deep Learning' 카테고리의 다른 글
    • Tensorflow - Overfitting, Underfitting 개념
    • Tensorflow - ANN 분류 모델 activation, loss 함수 설정 방법
    • Tensorflow - 콜백 EarlyStopping 사용법
    • Tensorflow - Validation(검증)을 사용하는 방법
    드레:
    드레:

    티스토리툴바