딥러닝_Softmax Classification

2021. 8. 21. 14:28Deep Learning

Softmax Classification 다중 분류기

클래스가 여러개인 것을 분류하기 위해 소프트맥스를 사용한다. 이중분류기를 활용해서 0,1을 반복하는 방식으로 구현할 수 있다. 예를 들어 A,B,C 로 분류한다면, 질문3번을 통해서 분류할 수 있다. "C or not", "A or not", "B or not "

소프트맥스 함수는 함수에 들어오는 값들을 확률값으로 바꿔주는 기능을 한다. 클래스가 여러개 이기 때문에 sigmoid 가져왔을 때, 0.5보다 큰 값인지 확인하고 또 "얼마나" 큰 값 인지도 알아야한다. 

 

과정을 정리하면 Model 에 sigmoid 함수를 씌어주고 softmax 함수를 사용해 확률값으로 바꾸고 one-hot encoding으로 확률값 중에 가장 높은 클래스를 선택해 해당 클래스만 1로 만들고 나머지는 다 0으로 만든다. 

 

 

지도학습이기 때문에 input과 output 이 있다. 즉 라벨링(정답)이 되어있다. 모델의 예측값과 실제값을 기반으로 모델이 잘 예측했는지에 대해 Cost(Loss)함수를 통해 평가한다. 여기에 사용한 Cost 함수는 Cross-Entropy이다.

 

Softmax Classification을 구현해봤다. 

 

!pip install tensorflow==1.15
import tensorflow as tf
x_data = [ [1,2,1,1], [2,1,3,2], [3,1,3,4], [4,1,5,5,], [1,7,5,5], [1,2,5,6], [1,6,6,6], [1,7,7,7]] #vectors
y_data = [ [0,0,1], [0,0,1], [0,0,1], [0,1,0],[0,1,0],[0,1,0],[1,0,0], [1,0,0] ] #one hot encoding
X = tf.placeholder(tf.float32, shape=[None, 4])
Y = tf.placeholder(tf.float32, shape=[None, 3])
W = tf.Variable(tf.random_normal([4, 3]))
b = tf.Variable(tf.random_normal([3]))

model_LC = tf.add(tf.matmul(X,W),b) #Wx + b
model = tf.nn.softmax(model_LC)
cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits_v2(logits=model_LC, labels=Y)) 
train = tf.train.GradientDescentOptimizer(0.1).minimize(cost)

with tf.Session () as sess:
  sess.run(tf.global_variables_initializer())
  # Training
  for step in range(2001):
    c, _ = sess.run([cost, train], feed_dict={X:x_data, Y:y_data})
    print(step, c)
  # Testing
  test1 = sess.run(model, feed_dict={X: [[1,11,7,9]]}) #새로운 input을 넣어 분류시키기
  print(test1, sess.run(tf.argmax(test1, 1))) #tf.argmax는 test1dml 가장 큰 값의 위치를 반환함

 

분류프로그래밍 결과는 다음과 같다. 

 

...

1993 0.15767111

1994 0.15761451

1995 0.15755783

1996 0.15750122

1997 0.15744475

1998 0.15738823

1999 0.15733188

2000 0.15727536

[[2.7449222e-03 9.9724627e-01 8.8414281e-06]] [1]

 

[1] 이므로 두번째에 해당하는 B가 가장 유사하다는 것을 알 수 있다.

 

Softmax_Classification.ipynb
0.07MB

Referene

https://chacha95.github.io/2018-11-09-Softmax/

https://vitalflux.com/what-softmax-function-why-needed-machine-learning/