728x90
반응형
y 값이 실수로 저렇게 2.0, 1.0, 0.1 이렇게 나오면
이걸 softmax를 통해서 A B C 가 나올 확률이 나오도록 하기
확률을 다 더했을 때에는 1이 되어야 한다.
tensorflow로 이걸 구현해보자
softmax라는 function을 제공하기 때문에 갖다 쓰면된다
scores 들을 logit이라고 부르기도 함
XW는 tf.matmul(X,W)+b로 쓰면 된다
loss function은 위처럼 나타내면 된다.
cost를 minimzie 하는 건 어떻게 했었지?
미분한 값에다가 learning rate를 곱해주고 - 해주면 되지.
optimizer를 이용하자
전체코드를 보자
import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()
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]]
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]]
X = tf.placeholder("float", [None, 4])
Y = tf.placeholder("float", [None, 3])
nb_classes = 3
W = tf.Variable(tf.random_normal([4, nb_classes]), name='weight')
b = tf.Variable(tf.random_normal([nb_classes]), name='bias')
# tf.nn.softmax computes softmax activations
# softmax = exp(logits) / reduce_sum(exp(logits), dim)
hypothesis = tf.nn.softmax(tf.matmul(X, W) + b)
# Cross entropy cost/loss
cost = tf.reduce_mean(-tf.reduce_sum(Y * tf.log(hypothesis), axis=1))
optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.1).minimize(cost)
# Launch graph
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
for step in range(2001):
_, cost_val = sess.run([optimizer, cost], feed_dict={X: x_data, Y: y_data})
if step % 200 == 0:
print(step, cost_val)
print('--------------')
# Testing & One-hot encoding
a = sess.run(hypothesis, feed_dict={X: [[1, 11, 7, 9]]})
print(a, sess.run(tf.argmax(a, 1)))
print('--------------')
b = sess.run(hypothesis, feed_dict={X: [[1, 3, 4, 3]]})
print(b, sess.run(tf.argmax(b, 1)))
print('--------------')
c = sess.run(hypothesis, feed_dict={X: [[1, 1, 0, 1]]})
print(c, sess.run(tf.argmax(c, 1)))
print('--------------')
all = sess.run(hypothesis, feed_dict={X: [[1, 11, 7, 9], [1, 3, 4, 3], [1, 1, 0, 1]]})
print(all, sess.run(tf.argmax(all, 1)))
y의 value를 one hot 이라는 방법으로 표시를 해주었다
x와 y의 placeholder를 보자
x는 4개의 element가 주어지니까 4를 적어줘야 하고
y는 같은 이유로 3이다
nb_classes 는 클래스의 개수이다
학습을 할땐 session열고 초기화 하고
optimizer 실행..
그럼 담에 one-hot encoding 을 해보자
softmax를 통과하면 확률이 된다
지금 값이 3개가 나왔는데 가운데에 있는데 0.9xx를 나타낸다.
가장 큰 값을 골라야 겠지
tensorflow 에서는 arg_max()라는 것을 쓴다
1을 돌려줄것이다 두번째 꺼니까
여러개를 입력할 수 도 있겠다
첫번째 단의 답은 1이고
두번째 단의 답은 0이고
세번째 단의 답은 2
728x90
반응형