머신러닝 혹은 딥러닝을 수행하면서 Softmax 방법을 사용하기 위해서는 One hot encoding 방법을 사용해야 합니다. 이번 포스팅에서는 파이썬 텐서플로우를 사용해서 One hot encoding 코드를 예제를 통해 구현해보겠습니다.
Tensorflow에는 1 버전과 2 버전이 있는 만큼 두 가지에서 각각의 버전에서 사용 가능한 코드를 구현하겠습니다.
예제 데이터
One hot encoding 예제를 풀기 위해서는 데이터가 필요합니다. 아래와 같이 예제 데이터를 선언할 계획이며, 이 중에서 Output data를 사용해서 예제를 구현해보겠습니다. Input data는 다른 예제에서 사용됩니다.
# 예제 데이터 선언
import numpy as np
Input_data = np.array([[1,1], [2,2], [3,3], [4,4], [5,5], [6,6], [7,7], [8,8]])
Output_data = np.array([[0], [1], [2], [3], [4], [5], [6], [7]])
Tensorflow 1 One hot encoding
아시다시피 텐서플로우는 1 버전과 2 버전으로 나눌 수 있습니다. 이번 절에서 사용하는 코드는 Tensorflow 1 버전에서 사용 가능한 코드입니다.
# Label to One-hot Encording
import tensorflow as tf
nb_classes = 8 # Label EA
Y_one_hot = tf.reshape(tf.one_hot(Output_data, nb_classes), [-1, nb_classes])
with tf.Session() as sess:
Output_data_hot = sess.run(Y_one_hot)
print(Output_data_hot)
Tensorflow 2 One hot encoding
해당 코드는 텐서플로우 2 버전에서 사용 가능한 코드입니다. 버전2에서는 Session() 단계가 없어지면서 코드가 심플해진 것을 확인하실 수 있습니다.
# Label to One-hot Encording
import tensorflow as tf
nb_classes = 8 # Label EA
Y_one_hot = tf.reshape(tf.one_hot(Output_data, nb_classes), [-1, nb_classes])
print(Y_one_hot)
One hot encoding 출력
버전 1과 버전 2의 출력 값은 동일하며 출력은 아래와 같습니다. 주의해야 하는 점은 One hot encoding 적용 전의 Y 데이터가 정수로 구성된다면 0부터 차례대로 Labeling 되어 있어야 한다는 점입니다. 이는 Y의 데이터를 바꿔보면서 테스트한다면 쉽게 이해 가능합니다.
tf.Tensor(
[[1. 0. 0. 0. 0. 0. 0. 0.]
[0. 1. 0. 0. 0. 0. 0. 0.]
[0. 0. 1. 0. 0. 0. 0. 0.]
[0. 0. 0. 1. 0. 0. 0. 0.]
[0. 0. 0. 0. 1. 0. 0. 0.]
[0. 0. 0. 0. 0. 1. 0. 0.]
[0. 0. 0. 0. 0. 0. 1. 0.]
[0. 0. 0. 0. 0. 0. 0. 1.]], shape=(8, 8), dtype=float32)
마치며
이번 포스팅에서는 Tensorflow를 사용한 One hot encoding 예제를 구현해보았습니다. 텐서플로우는 버전 1과 버전 2로 사용 가능하기 때문에 두 가지 방법 모두 구현했습니다. 해당 방법을 사용해서 Softmax 예제를 풀어보시면 되겠습니다.
댓글