03_classification

활성화함수

@activation_fucntion
activation function은 인공신경망을 통과해온 값을 최종적으로 어떤 값으로 만들지를 결정 대표적으로 Sigmoid, ReLU, tanh함수가 있음


backpropagation

@backpropagation
출력층이 내놓은 결과의 오차를 입력층까지 전달하며 가중치를 계산


classification model

In [1]:
import tensorflow as tf
import numpy as np
In [2]:
# [털, 날개]
x_data = np.array([
    [0, 0],
    [1, 0],
    [1, 1],
    [0, 0],
    [0, 0],
    [0, 1]
])

# [기타, 포유류, 조류]
y_data = np.array([
    [1, 0, 0], # 기타
    [0, 1, 0], # 포유류
    [0, 0, 1], # 조류
    [1, 0, 0], # 기타
    [1, 0, 0], # 기타
    [0, 0, 1]  # 조류
])

#     [0, 0] -> [1, 0, 0] # 털x, 날개x -> 기타
#     [1, 0] -> [0, 1, 0] # 털o, 날개x -> 포유류
#     [1, 1] -> [0, 0, 1] # 털o, 날개o -> 조류
#     [0, 0] -> [1, 0, 0] # 털x, 날개x -> 기타
#     [0, 0] -> [1, 0, 0] # 털x, 날개x -> 기타
#     [0, 1] -> [0, 0, 1] # 털x, 날개o -> 조류


neuralnet model setting

X, Y는 실측값groud truth를 넣어서 학습 -> placeholder

In [3]:
X = tf.placeholder(tf.float32)
Y = tf.placeholder(tf.float32)

# weith와 bias 설정
W = tf.Variable(tf.random_uniform([2, 3], -1., 1.)) # 입력, 출력
b = tf.Variable(tf.zeros([3]))

L = tf.add(tf.matmul(X, W), b)
L = tf.nn.relu(L)

# 출력값을 softmax 함수를 이용하여 다듬어줌
# softmax는 결과값들을 전체 합이 1이 되도록 만들어줌 ==> 확률로 해석 가능
model = tf.nn.softmax(L)


cost function

  • one-hot encoding을 이용한 대부분의 모델에서는 cross-entropy를 사용
    $E(w,\quad b)\quad =\quad -\sum _{ n=1 }^{ N } \left\{ { t_{ n }logy_{ n }+(1-t_{ n })log(1-y_{ n }) } \right\} $
In [4]:
cost =tf.reduce_mean(-tf.reduce_sum(Y*tf.log(model) + (1-Y)*tf.log(1 - model), axis=1))


modeling

In [5]:
optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.001).minimize(cost)

init = tf.global_variables_initializer()
sess = tf.Session()
sess.run(init)

for step in range(1000):
    sess.run(optimizer, feed_dict={X:x_data, Y:y_data})
    
    if (step+1) % 50 == 0:
        print("{}, {}".format(step+1, 
                             sess.run(cost, feed_dict={X:x_data, Y:y_data})))
50, 1.9566283226013184
100, 1.9450751543045044
150, 1.9336179494857788
200, 1.9222602844238281
250, 1.911005973815918
300, 1.899857997894287
350, 1.888819694519043
400, 1.8778947591781616
450, 1.8670859336853027
500, 1.856396198272705
550, 1.8458284139633179
600, 1.835384726524353
650, 1.8250678777694702
700, 1.8148797750473022
750, 1.804822325706482
800, 1.7948967218399048
850, 1.7851048707962036
900, 1.7754473686218262
950, 1.7659250497817993
1000, 1.7565385103225708


output

예측값인 model을 바로 출력하면 확률로 나오기 때문에 요소중 가장 큰 값의 인덱스를 찾아주는 argmax()를 이용

In [6]:
sess.run(model, feed_dict={X:x_data})
Out[6]:
array([[0.3319709 , 0.3319709 , 0.33605826],
       [0.2515205 , 0.45800376, 0.29047582],
       [0.21185754, 0.42796907, 0.36017334],
       [0.3319709 , 0.3319709 , 0.33605826],
       [0.3319709 , 0.3319709 , 0.33605826],
       [0.29241043, 0.2897259 , 0.4178636 ]], dtype=float32)
In [7]:
prediction = tf.argmax(model, axis=1)
target = tf.argmax(Y, axis=1)

print("prediction: {}".format(sess.run(prediction, feed_dict={X:x_data})))
print("ground_truth: {}".format(sess.run(target, feed_dict={Y:y_data})))
prediction: [2 1 1 2 2 2]
ground_truth: [0 1 2 0 0 2]


accuracy

In [8]:
is_correct = tf.equal(prediction, target)

# tf.cast : True, False -> 1, 0
accuracy = tf.reduce_mean(tf.cast(is_correct, tf.float32))
print("accuracy: {:.3f}".format(sess.run(accuracy, feed_dict= {X:x_data, Y:y_data})))
accuracy: 0.333
In [9]:
from IPython.core.display import display, HTML

display(HTML("<style> .container{width:100% !important;}</style>"))

'Deep_Learning' 카테고리의 다른 글

06.tensorboard01_example  (0) 2018.12.09
05.deep_neural_net_Costfun2  (0) 2018.12.09
04.deep_neural_net_Costfun1  (0) 2018.12.09
02.linear_regression  (0) 2018.12.09
01.tesnsor_and_graph  (0) 2018.12.09

+ Recent posts