2021. 8. 21. 14:28ㆍDeep 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가 가장 유사하다는 것을 알 수 있다.
Referene
https://chacha95.github.io/2018-11-09-Softmax/
https://vitalflux.com/what-softmax-function-why-needed-machine-learning/
'Deep Learning' 카테고리의 다른 글
딥러닝_합성곱 신경망 (Convolutional Neural Network, CNN) (0) | 2021.08.26 |
---|---|
딥러닝_Binary Classification (0) | 2021.08.20 |
딥러닝_Linear Regression Implementation (0) | 2021.08.19 |