본문 바로가기

머신러닝 읽어주는 남자

[Tensorflow 101 - 2] 기본 Neural Network Classifier(Feed Forward NN)

반응형

텐서플로우로 아주 간단한 classifier를 만들어봅시다.

 

흔한 예제인 스팸필터를 만든다고 생각해봅니다.

 

광고라는 단어가 있으면 1 없으면 0


상관 없는 단어인 김치라는 단어가 있으면 1, 없으면0

 

전화번호가 저장되어 있으면 1, 없으면 0이라고 해봅시다.

 

[1,1, 1]은 광고라는 단어도 있고, 김치라는 단어도 있고, 전화번호도 저장되어 있는 경우입니다.

 

상식적으론

 

데이터 [1,0,0], [1,1,0] => 스팸 [1,0]

나머지 데이터 => no 스팸 [0,1] 

 

일겁니다. 이걸 구별하는 코드를 만들어 봅시다.

 

 (트레이닝 데이터와 테스트 데이터와 동일하므로 좋은 예는 아니겠지만)

import tensorflow as tf
import numpy as np

#트레이닝 데이터 만들기
x_data = np.array([[1,1,1], [1,1,0], [1,0,1], [1,0,0],[0,1,1],[0,1,0],[0,0,1],[0,0,0]])
y_data = np.array([[0,1] , [1,0], [0,1], [0,1], [0,1], [0,1], [0,1], [0,1]])

#데이터를 넣을 곳을 만들기
x = tf.placeholder(tf.float32,name = "x")
y = tf.placehoder(tf.float32, name = "y")

#학습할 파라미터 선언 하기
w= tf.Variable(tf.zeros([3,2]), name = "w")
b= tf.Variable(tf.zeros[2], name = "b")

#net input을 구한다.
net_input = tf.add(tf.matmul(x,b),b)

#activation function을 통과 시킨다.
activation = tf.relu(net_input)

#softmax를 통과시켜서 일반 값을 확률값으로 변모 시킨다.
hyp = tf.nn.softmax(activation, name = "hyp")

cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logis(logits=hyp, labels = y))

opt = tf.train.AdamOptimizer(learning_rate = 0.1)
training = opt.minimize(cost)

with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    for itr in range(100):
        _,c = sess.run([training,cost], feed_dict ={x:x_data, y :y_data})
        print(itr, c)
    ests, inputs, gts = sess.run([hyp, x,y], ={x:x_data, y :y_data})
    for input,gt,est in zip(inputs,gts,ests):
        print(input,gt,est)


반응형