AI & BigData/모두를 위한 딥러닝(정리)

텐서플로우(Tensor Flow) #8_ TensorFlow로 Fancy Softmax Classification 구현하기

Tigercow.Door 2018. 4. 5. 16:09
728x90


안녕하세요. 문범우입니다.

이번 포스팅에서는 Fancy Softmax Classification을 구현하겠습니다.

지난 포스팅에서는, 단순히 Softmax Classification을 구현해보았는데, 이번에는 보다 더 이쁘게, 기본적으로 제공되는 croso_entropy, one_hot, reshape을 이용해서 구현해보도록 하겠습니다.


* 해당 포스트의 모든 내용은 김성훈 교수님의 '모두를 위한 딥러닝'을 바탕으로 제작되었습니다.

관련한 상세 내용은 아래 링크를 참고해주세요.

https://hunkim.github.io/ml/



1. softmax_cross_entropy_with_logits



먼저 알아볼 것은 softmax cross entropy with logits 이란 함수입니다.

그 전에 잠깐, 우리가 그전에 hypothesis를 어떻게 계산했는지 한번 더 확인해보겠습니다.

우리는 주어진 X에 대해서 학습할 W를 매트릭스로 곱하고 bias를 더합니다. 그리고 이것을 여기서 logits이라고 부르겠습니다. 그리고 이 logits를 softmax로 통과시키면 우리가 원하는 최종 hypothesis, 즉 확률로써 값을 얻을 수 있습니다.

그리고 이어서 cost를 계산했습니다.


softmax cross entropy with logits를 살펴보자면, 위 그림의 2번식과 같이 우리가 위에서 새롭게 정의한 logits을 이용합니다.

해당 softmax cross entropy with logits 함수는 두개의 인자를 받습니다. logits 과 labels을 받습니다. 각각의 인자에 우리가 설정했던 logits과 labels이름을 적절히 넣어주면 됩니다.


당연히 2번식을 통해 얻은 cost는 위의 1번, 우리가 원래 하던 과정과 동일한 cost입니다.



2. Animal classification


이번에는 우리가 배웠던 것을 이용해서 동물들을 분류해보는 실습을 진행해보도록 하겠습니다.

동물을 다리의 숫자, 뿔의 유무 등의 특징을 이용해서 0~6, 총 7종류로 분류해보겠습니다.


위 그림의 표는 잘 보이지 않지만, 제일 우측에는 예측되는 결과 값이고, 나머지의 값은 x_data 입니다.

따라서, 그림에 나와 있는 코드처럼 x와 y데이터를 알맞게 불러와 줍니다.


여기서 Y데이터의 모양에 대해서 한번 더 살펴보겠습니다.

y는 n개의 데이터에 대해 1줄로써 표현되기에 ( ? , 1 )과 같은 shape을 가집니다.



그리고 해당 Y값을 one_hot 함수를 통과시킵니다.

그런데 이때 주의해야 할점은, 위 코드에서 3번째 줄처럼 one_hot을 통과시키면 shape이 하나 증가하게 됩니다.

예를 들어 y의 값이 [[0],[3]] 이 었다면 3번째 줄의 one_hot 함수를 통해,

[[[1000000]],[0001000]] 이 될 것입니다.

이럴떄 우리가 사용하는 함수는 reshape 입니다. 


이후에는 우리가 그동안 했던 것처럼, placeholder 등을 적절히 설정하여 코드를 작성합니다.

전체적인 코드는 아래와 같습니다.



그리고 결과를 보면 아래와 같은 결과를 확인할 수 있습니다.

Step이 늘면서 Loss가 매우 적어지고, 이후 100%의 예측률을 보이게 됩니다.



이렇게 하여 TensorFlow로 Fancy Softmax Classification을 구현해보았습니다.

one_hot과 관련되어 reshape 함수도 사용해보았고, logits이라는 것을 사용하기도 하였습니다.

내용에 대한 피드백이나 궁금한 사항은 댓글 또는 이메일로 남겨주세요.