본문 바로가기
Study/Machine&Deep Learning

[ML] Softmax classifier

by graygreat 2018. 5. 29.
728x90
반응형


Softmax의 기본


Scores --> probabilities


Softmax



'ONE-HOT' Encoding을 통해 가장 큰 값을 제외한 값을 0으로 바꾸고 가장 큰 값을 1로 바꿈.




















Softmax Classifier의 Cost function


 

값이 일치하면 0, 그렇지 않으면 무한대로 간다.



arg_max : 새로운 값(리스트)를 던져주고 함수의 인자에 따라 몇 번째 인덱스에 존재하는지를 반환해주는 함수.

 

arg_max(a, 1)의 뜻은 a에서 1번째 값, 즉 가장 큰 값을 찾으라는 것을 말한다. [1, 11, 7, 9]에서 가장 큰 값의 인덱스는 1이기 때문에 1을 반환하게 된다.


소스 코드



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
import tensorflow as tf
 
x_data = [[1211],
          [2132],
          [3134],
          [4155],
          [1755],
          [1256],
          [1666],
          [1777]]
y_data = [[001],
          [001],
          [001],
          [010],
          [010],
          [010],
          [100],
          [100]]
 
= tf.placeholder(tf.float32, [None, 4])
= tf.placeholder(tf.float32, [None, 3])
np_classes = 3
 
= tf.Variable(tf.random_normal([4, np_classes]), name='weight')
= tf.Variable(tf.random_normal([np_classes]), name='bias')
 
hypothesis = tf.nn.softmax(tf.matmul(X, W) + b)
 
cost = tf.reduce_mean(-tf.reduce_sum(Y * tf.log(hypothesis), axis=1))
 
optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.01).minimize(cost)
 
with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
 
    for step in range(2001):
        sess.run(optimizer, feed_dict={X: x_data, Y: y_data})
        if step % 200 == 0:
            print(step, sess.run(cost, feed_dict={X: x_data, Y: y_data}))
 
    print('--------------')
 
    # Testing & One-hot encoding
    a = sess.run(hypothesis, feed_dict={X: [[11179]]})
    print(a, sess.run(tf.argmax(a, 1)))
 
    print('--------------')
 
    b = sess.run(hypothesis, feed_dict={X: [[1343]]})
    print(b, sess.run(tf.argmax(b, 1)))
 
    print('--------------')
 
    c = sess.run(hypothesis, feed_dict={X: [[1101]]})
    print(c, sess.run(tf.argmax(c, 1)))
 
    print('--------------')
 
    all = sess.run(hypothesis, feed_dict={
                   X: [[11179], [1343], [1101]]})
    print(all, sess.run(tf.argmax(all, 1)))
 


 

결과




반응형

'Study > Machine&Deep Learning' 카테고리의 다른 글

[ML] Learning rate  (0) 2018.06.03
[ML] Fancy Softmax Classifier  (0) 2018.05.31
[ML] Logistic Classification  (0) 2018.05.20
[ML] TensorFlow로 파일에서 데이터 읽어오기  (2) 2018.05.16
[ML] multi-variable linear regression  (0) 2018.05.08

댓글