티스토리 뷰
[머신러닝 - Tensorflow] Lec-15 TensorFlow로 Fancy Softmax Classification의 구현하기 (new)
감자형 2018. 3. 18. 04:261. Soft_cross_entropy_with_logics
들어가기 앞서, 기본적인것들 재복습
자 이제, Animal Classfication(with softmax_cross_entropy_with_logics 을 사용하여 예제를 확인해볼
이다.
Y의 값을 보았을때, 0~6범위를 나타내고 있으며, Y축을 나타내는값은 1개인것을 알 수 있다.
우리는 이제 placeholder를 사용하여서 shape 값을 정의할 것인데, 현재 y의 값을 나타내는것은 1개 이고, N개의 필드가 들어올 수 있음을 시사한다. 이것을 표현하면 tf.placeholder(tf.int32,[None,1])로 나타낼 수 있다. 이제 우리는 이것들의 데이터들을 one_hot을 사용하여 분류를 하게될 것이다. 근데 이때, one_hot을 사용하게 되면 하나의 차원의 수를 높여주게 되므로 , 예를들어 [1000000] 이면 [0001000]의 식으로 만들어 주게 된다. 따라서 이것들을 원래의 값으로 돌려주기 위해서는 reshape 함수를 사용하여 , y_one_hot의 값을 다시 되돌린후, 값을 구할 수 있다.
2. 코드 설명
* 설정 부분
1) data-04-zoo에 있는 csv파일을 읽어 들인다. 타입은 float 타입으로
2) x_data, ydata 를 정규식으로 가져온다
3) nb_class의 범위 만큼 가져오기 때문에 7로 설정한다 ( 0~6)
4) X,Y의 노드를 설정한다.
5)Y_one_hot을 사용하여 Y의 class수만큼 설정한다. 이제 그 랭크가 올라간 만큼 down을 시켜줘야 하므로, reshape함수를 사용하여 다시 자기가 원하는 수만큼 낮춰주게한다.
6)w,b값을 Variable 함수를 이용하여 설정을 해주게 된다 . weight값은 7 을 나타내고 bias의 값도 7을 나타내게 된다.
7)logits값에 tf.matmul함수를 사용하여 matrix의 값들을 곱을 해줘서 가져온 값을 저장한다.
8)이제 가장 중요한 hypothesis의 값을 구하기 위해서 softmax함수를 이용하여 인자값으로 logits를 넘겨준다.
9)마지막으로 softmax_cross_emtropy_with_logits() 함수를 사용하여 cost를 분리한 값들을 가져온다. 이제 이것들을 평균을 내어 cost변수에 저장시킨후 최종적으로 optimizer(최소값을 가져 온다.)
*학습 부분
이제 학습을 시키기 위한 과정이다. cost_i값들을 모두 평균을 낸후 cost에 넣는다.
이제 optimizer 변수에 최소값을 구하게 된다.
argmax를 사용하여서 하나의 값중하나로 만들어 내는과정.
3. 전체 소스
import tensorflow as tf | |
import numpy as np | |
tf.set_random_seed(777) # for reproducibility | |
# Predicting animal type based on various features | |
xy = np.loadtxt('data-04-zoo.csv', delimiter=',', dtype=np.float32) | |
x_data = xy[:, 0:-1] | |
y_data = xy[:, [-1]] | |
print(x_data.shape, y_data.shape) | |
nb_classes = 7 # 0 ~ 6 | |
X = tf.placeholder(tf.float32, [None, 16]) | |
Y = tf.placeholder(tf.int32, [None, 1]) # 0 ~ 6 | |
Y_one_hot = tf.one_hot(Y, nb_classes) # one hot | |
print("one_hot", Y_one_hot) | |
Y_one_hot = tf.reshape(Y_one_hot, [-1, nb_classes]) | |
print("reshape", Y_one_hot) | |
W = tf.Variable(tf.random_normal([16, 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) | |
logits = tf.matmul(X, W) + b | |
hypothesis = tf.nn.softmax(logits) | |
# Cross entropy cost/loss | |
cost_i = tf.nn.softmax_cross_entropy_with_logits(logits=logits, | |
labels=Y_one_hot) | |
cost = tf.reduce_mean(cost_i) | |
optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.1).minimize(cost) | |
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)) | |
# Launch graph | |
with tf.Session() as sess: | |
sess.run(tf.global_variables_initializer()) | |
for step in range(2000): | |
sess.run(optimizer, 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: {:5}\tLoss: {:.3f}\tAcc: {:.2%}".format( | |
step, loss, acc)) | |
# Let's see if we can predict | |
pred = sess.run(prediction, feed_dict={X: x_data}) | |
# y_data: (N,1) = flatten => (N, ) matches pred.shape | |
for p, y in zip(pred, y_data.flatten()): | |
print("[{}] Prediction: {} True Y: {}".format(p == int(y), p, int(y))) |
'AI' 카테고리의 다른 글
[머신러닝] Pandas(판다스) 정리 (0) | 2018.08.08 |
---|---|
[머신러닝] Anaconda2(아나콘다)/Jupyter Notebook(주피터) 환경구축 및 설치하기 (0) | 2018.08.08 |
[머신러닝 - Tensorflow]Lec14-TensorFlow로 Softmax Classification의 구현하기 (0) | 2018.03.18 |
[머신러닝 - Tensorflow] Lec-13 Softmax classifier 의 cost함수 (0) | 2018.03.18 |
[머신러닝 - Tensorflow] Lec-12 Softmax Regression (Multinomial Logistic Regression) (0) | 2018.03.18 |
- Total
- Today
- Yesterday
- 노드
- 학교
- 프로그래밍
- 백준
- 알고리즘
- Algorigm
- MVC
- 감자개발자
- 개발하는 관광이
- 안드로이드
- programming
- 리버싱
- 텐서플로우
- db
- TensorFlow
- BFS
- 코드엔진
- node
- 초보자를 위한 C언어 300제
- 백준알고리즘
- 머신러닝
- Android
- Spring
- C언어
- node.js
- 감자코딩
- C langauge
- 복습
- Controller
- 스프링
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |