MY MEMO
[MACHINE LEARNING] Softmax Function 본문
Softmax function은 0과 1로만 결과가 나오는 것이 아닌 다양한 값으로 결과가 나올 때 쓰는 알고리즘이다.
결과값은 확률로 나오는데 나온 결과값의 확률을 모두 더하면 1이 된다.
코드를 보기 이전에 one hot의 개념부터 잡아야한다.
one hot이 무엇일까? 바로 한개의 결과값이 도출된다는 뜻이다.
예를 들어
0은 첫번째에 hot되고 1은 두번째 2는 3번째에 hot된다. 이처럼 한개의 값에만 hot되는 것이 one hot이다.
자이제 코드를 보자. 먼저 가장 기본적인 softmax 코드이다.
먼저 x_data와 y_data를 정의해준다.
이후 hypothesis를 해주는데 여기서 softmax함수가 사용된 것을 알 수 있다.
cost는 reduce_sum과 recude_mean을 사용했다.
sum은 합 mean은 평균이다.
그렇다면 sum 뒤의 axis는 무엇일까?
x=[[1,1,1],[1,1,1]]
tf.reduce_sum(x) ==> 6
tf.reduce_sum(x, 0) ==> [2, 2, 2]
tf.reduce_sum(x, 1) ==> [3, 3]
참고 : https://www.tensorflow.org/api_docs/python/tf/reduce_sum
위의 코드를 보면 쉽게 이해할 수 있을 것이다.
이후 Session으로 코드를 돌려보면
이러한 결과값이 도출된다. cost가 점점 0에 가까워지면서 알맞은 결과값이 도출되는 것이다.
그럼 이렇게 나온 결과값이 정답과 맞는지 확인해보자
hypothesis를 이용하여 보고싶은 결과값의 session을 돌리고 arg_max를 해준다.
arg_max는 어떤 값이 1에 가장 가까운지 확인해주는 것이다.
아래 all이라는 값도 있는데 이 값은 한번에 모든 데이터의 결과값을 보고싶을 때 사용한다.
그럼 data 파일을 가져와서 사용해보자. 이번 코드는 조금 더 복잡해진다.
data-04-zoo.csv코드를 사용하는데 이 코드는 동물을 특징을 나타내고 어떤 동물인지 결과값을 도출해준다고 한다.
이후 Y_one_hot을 보면 tf.one_hot을 이용하여 one hot을 찾는데 (이 코드만 구현하면 error가 난다)
밑에 reshape를 이용하여 다시 한번 shape를 바꿔준다.
왜 코드를 추가해준걸까?
print한 결과값을 먼저 보자.
처음 print한것은 tf.one_hot의 함수만 사용햇을 때이다. one_hot의 함수 결과값의 shape을 보면 1차원의 배열이 추가되어있다.
이는 우리가 원하는 결과값이 아니다!!
따라서 우리는 reshape을 통해 우리가 원하는 결과값을 도출해준다.
reshape이후에는 [?,7]의 배열로 알맞은 배열의 shape이 도출되었다.
이 코드에서 위의 코드와 가장 많이 다른점은 바로 cost를 계산할때이다.
1)
2)
1)과 같았던 코드를
2) softmax_cross_entropy_with_logits 를 이용하여 프로그래머가 훨씬 더 사용하기 쉬워졌다.
이 코드에서는 한 step을 갈때마다 cost와 정확도를 분석해서 출력해주었다.
이후 prediction을 이용하여 실제로 얼마나 많이 맞는지 출력했다.
+) flatten : Return a copy of the array collapsed into one dimension.
'MACHINE LEARNING > Sung Kim - 실습' 카테고리의 다른 글
[MACHINE LEARNING] python & tensorflow Window 환경설정 (0) | 2017.06.26 |
---|---|
[MACHINE LEARNING] Training Dataset,Learning Rate, Normalization (0) | 2017.04.21 |
[MACHINE LEARNING] Logistic classifier (0) | 2017.04.19 |
[MACHINE LEARNING] Multi Variable Linear Regression (0) | 2017.04.17 |
[MACHINE LEARNING] Linear Regression 의 cost 최소화의 TensorFlow 구현 (0) | 2017.04.07 |