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)