TensorFlow

TensorFlow - Activation Function을 Softmax로 설정하고 나온 결과를 레이블 인코딩으로 변경하는 방법

Cong_S 2022. 6. 13. 17:32
# ANN 모델링
def build_model():
  model =  tf.keras.models.Sequential()
  model.add( tf.keras.layers.Flatten() )
  model.add(tf.keras.layers.Dense(1024, 'relu' )) 
  model.add(tf.keras.layers.Dense(10, activation= 'softmax' ))
  model.compile('adam', loss= 'sparse_categorical_crossentropy', metrics=['accuracy'])
  return model

다음과 같은 ANN을 구성하였다.

Activation Function은 Softmax로 설정하였을 때 

y_pred = model.predict(test_images)

 

학습이 끝난 후 테스트 데이터에 대해 예측을 하여 y_pred 변수에 넣고

컨퓨전 매트릭스를 돌리려 한다.

이 때 에러가 나게 되는데 이유는 다음과 같다.

 

예측된 결과의 데이터를 살펴보면 다음과 같다.

softmax 방식으로 도출해낸 결과는 이 결과를 모두 더했을때 1이 나오게 되고

이 결과값 중 값이 가장 큰 결과가 확률이 가장 높다고 예측되는 것이다.

 

다만, 컨퓨전 매트릭스에서 오류가 나는 이유는

test 결과 데이터는 레이블 인코딩의 형식 ([0 ,4 , 5, 1, 1, 3, 9...]) 으로 이루어져 있으므로

y_pred 의 결과도 레이블 인코딩을 해줄 필요가 있다.

 

데이터 전처리 과정처럼 라이브러리를 불러올 필요는 없고 가장 큰 값만 남겨놓으면 되기 때문에

다음과 같은 코드로 간단히 수정할 수 있다.

y_pred = y_pred.argmax(axis = 1)

 

argmax 함수로 확률이 가장 큰 값만 남길 수 있다.