23. 소프트맥스와 다항(multinomial) 분류
• 기본 아이디어 각 분류별로 값을 구한 뒤 확률로 변환
𝑤 𝑎1 𝑤 𝑎2 𝑤 𝑎3
𝑤 𝑏1 𝑤 𝑏2 𝑤 𝑏3
𝑤 𝑐1 𝑤 𝑐2 𝑤 𝑐3
×
𝑥1
𝑥2
𝑥3
=
𝑦1
𝑦2
𝑦3
𝑝1
𝑝2
𝑝3
소프트맥스
𝑆 𝑦𝑖 =
𝑒 𝑦𝑗
𝑗 𝑒 𝑦 𝑗
p1 + p2 + p3 = 1.0
24. 소프트맥스 비용함수
• 코로스 엔트로피
𝐷 𝑆, 𝐿 = −
𝑖
𝐿𝑖 log 𝑆𝑖
𝑝1
𝑝2
𝑝3
𝑦1
𝑦2
𝑦3
학습데이터 소프트맥스로
구한 확률
𝐿𝑜𝑠𝑠 =
1
𝑚
𝑖
𝐷 𝑆(𝑊𝑋𝑖, 𝐿𝑖)
* 1개 데이터에 대한 값 * 전체 학습 데이터에 대한 값
25. 텐서플로우로 소프트맥스 다항 분류 구현하기
xy = np.loadtxt('softmax_train.txt', unpack=False, dtype='float32')
x_data = xy[:, :2] # [8, 2]
y_data = xy[:, 2:] # [8, 3]
X = tf.placeholder(tf.float32, [None, 2]) # [n, 2]
Y = tf.placeholder(tf.float32, [None, 3]) # [n, 3]
W = tf.Variable(tf.zeros([2, 3]))
b = tf.Variable(tf.zeros([3]))
h = tf.nn.softmax(tf.matmul(X, W) + b) # [8, 3], h = softmax(XW + b)
cost = tf.reduce_mean(-tf.reduce_sum(Y*tf.log(h), reduction_indices=1))
optimizer = tf.train.GradientDescentOptimizer(0.001).minimize(cost)
init = tf.initialize_all_variables()
sess = tf.Session()
sess.run(init)
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}),
sess.run(W), sess.run(b))
26. 텐서플로우로 소프트맥스 다항 분류 구현하기
a = sess.run(h, feed_dict={X: [[11, 7]]})
print ("a :", a, sess.run(tf.arg_max(a, 1)))
b = sess.run(h, feed_dict={X: [[3, 4]]})
print ("b :", b, sess.run(tf.arg_max(b, 1)))
c = sess.run(h, feed_dict={X: [[1, 0]]})
print ("c :", c, sess.run(tf.arg_max(c, 1)))
a : [[ 0.46272621 0.35483006 0.18244369]] [0]
b : [[ 0.33820099 0.42101386 0.24078514]] [1]
c : [[ 0.27002314 0.29085544 0.4391214 ]] [2]
27. 참고
• 온라인 그래프 출력
• https://www.desmos.com/calculator
• 모두를 위한 딥러닝 (김성훈 교수님)
• https://hunkim.github.io/ml/
• 실습한 코드
• https://github.com/madvirus/tfstudy
28. 참고, Anaconda로 설치
• anaconda + jupyter
• 환경 생성
• conda create -n tensorflow python=3.5
• 생성한 환경에서 텐서플로우와 관련 라이브러리 설치
• source activate tensorflow
• pip install tensorflow
• conda install matplotlib
• conda install seaborn
• conda install notebook ipykernel
• ipython kernel install --user
• 참고
• Installation Quickstart: TensorFlow, Anaconda, Jupyte (https://goo.gl/kSeZKI)