티스토리 뷰
ML (Machine Learning)
[딥러닝 기본 17] Lab 06_2 - tensorflow로 fancy softmax classification의 구현하기
Nero :) 2017. 6. 2. 14:50모두를 위한 머신러닝 / 딥러닝 김성훈 교수님 강의를 듣고 정리한 내용입니다.
@ Softmax classification
@ Tensorflow
- softmax_cross_entropy_with_logits 를 사용하여 Softmax classification 구현
- 동물의 특징에 따라 7가지로 분류 예제
- data file : data-04-zoo.csv
import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
import tensorflow as tf
import numpy as np
# 동물 데이터 불러오기
xy = np.loadtxt('data-04-zoo.csv', delimiter=',', dtype=np.float32)
x_data = xy[:, 0:-1]
y_data = xy[:, [-1]]
# Y data가 0 ~ 6으로 7가지
nb_classes = 7
# placeholder
X = tf.placeholder(tf.float32, shape=[None, 16])
Y = tf.placeholder(tf.int32, shape=[None, 1]) # shape = (?, 1)
# Y data를, one-hot으로 변경 : shape = (?, 1, 7)
Y_one_hot = tf.one_hot(Y, nb_classes)
# one_hot을 통과하면 차원이 늘어나므로, reshape로 줄여주기 : shape = (?, 7)
Y_one_hot = tf.reshape(Y_one_hot, [-1, nb_classes])
W = tf.Variable(tf.random_normal([16, nb_classes]), name="weight")
b = tf.Variable(tf.random_normal([nb_classes]), name="bias")
# Hypothesis : softmax function 사용
# softmax = exp(logits) / reduce_sum(exp(logits))
logits = tf.matmul(X, W) + b
hypothesis = tf.nn.softmax(logits)
# cost/loss function : cross entropy
cost_i = tf.nn.softmax_cross_entropy_with_logits(logits=logits, labels=Y_one_hot)
cost = tf.reduce_mean(cost_i)
# Minimize : Gradient Descent 사용
train = tf.train.GradientDescentOptimizer(learning_rate=0.1).minimize(cost)
# argmax() : [0.1, 0.3, 0.5]의 argmax는 1로 가장 큰 값의 index 출력
prediction = tf.argmax(hypothesis, 1)
correct_prediction = tf.equal(prediction, tf.argmax(Y_one_hot, 1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
# 세션 시작
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
for step in range(2001):
sess.run(train, feed_dict={X: x_data, Y: y_data})
if step % 100 == 0:
loss, acc = sess.run([cost, accuracy], feed_dict={X: x_data, Y: y_data})
print(step, sess.run([cost, accuracy], feed_dict={X: x_data, Y: y_data}))
# 2000 [0.053728174, 1.0]
# Predict Test
pred = sess.run(prediction, feed_dict={X: x_data})
# y_data.flatten() : 다차원 배열을 1차원 배열로 쭉 펴준다.
# zip : pred와 y_data.flatten() 2개의 배열을 하나로 묶어서 p, y로 넘겨줌
for p, y in zip(pred, y_data.flatten()):
print("[{}] Prediction: {} True Y: {}".format(p == int(y), p, int(y)))
# [True] Prediction: 6 True Y: 6
# [True] Prediction: 1 True Y: 1
'ML (Machine Learning)' 카테고리의 다른 글
[딥러닝 기본 19] Lec 07_2 - training / test 데이터 셋 (0) | 2017.06.06 |
---|---|
[딥러닝 기본 18] Lec 07_1 - learning rate, overfitting 그리고 일반화(regularization) (0) | 2017.06.06 |
[딥러닝 기본 16] Lab 06_1 - tensorflow로 softmax classification의 구현하기 (0) | 2017.06.02 |
[딥러닝 기본 15] Lec 06_2 - softmax classification의 cost 함수 (0) | 2017.06.02 |
[딥러닝 기본 14] Lec 06_1 - softmax classification: 기본개념 소개 (0) | 2017.06.01 |
댓글