본문 바로가기
인공지능/Deep Learning

[Deep Learning] TensorFlow 레이블 인코딩된 값을 원핫 인코딩으로 바꾸기

by coding_su 2022. 12. 29.

📝딥러닝 텐서플로우 넘파이의 레이블 인코딩된 값을 원핫 인코딩으로 바꾸는 방법

바꾸는 방법은 텐서플로우에서 제공한다

import tensorflow as tf

# 학습용과 테스트용 둘다 바꿔준다 (num_classes= 는 아웃풋 레이어 갯수)
y_train = tf.keras.utils.to_categorical(y_train, num_classes= 10)
y_test = tf.keras.utils.to_categorical(y_test, num_classes= 10)


# 이렇게도 가능
from keras.utils import to_categorical

y_train = to_categorical(y_train, 10)
y_test = to_categorical(y_test, 10)

 

모델링할때 원핫인코딩 하였으므로 loss= 'categorical_crossentropy' 입력

분류 문제 loss 셋팅 https://coding-jisu.tistory.com/156

def build_model() :
  model = Sequential()
  model.add( Dense( units= 512, activation= 'relu', input_shape= (784, ) ) )
  model.add ( Dropout(0.4) )
  model.add( Dense( units=10, activation= 'softmax' ) )
  model.compile( optimizer= 'adam', loss= 'categorical_crossentropy', metrics= [ 'accuracy' ])
  return model

 

학습하고 모델을 평가할때 confusion_matrix를 사용하려면 원핫 인코딩을 다시 레이블 인코딩으로 바꿔준다

# 학습
model = build_model()
epoch_histroy = model.fit(X_train, y_train, epochs= 5, validation_data= (X_test, y_test))

# 평가
model.evaluate(X_test, y_test)
y_pred = model.predict(X_test)

from sklearn.metrics import confusion_matrix

# 원핫 인코딩을 레이블 인코딩으로 바꾸기
y_test = y_test.argmax(axis=1)
y_pred = y_pred.argmax(axis=1)

cm = confusion_matrix(y_test, y_pred)

댓글