TigerCow.Door


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

이번 포스팅에서는 Tensorflow를 통한 Softmax Classification 구현을 진행해보도록 하겠습니다.


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

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

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



1. Softmax Classification


우리가 이론부분에서 알아보았던 거처럼, Softmax는 어떤 n개의 예측하고자 하는 것이 있을때 Softmax를 사용합니다.




물론 이러한 Softmax도 위의 그림에서 볼 수 있듯이, 주어진 X값에 학습할 W를 곱해서 값을 만드는 것으로 시작합니다.

그리고 그러한 식의 결과로 나오는 것은 단순히 Score로써 실수값을 갖게되는데 이들을 Softmax function을 통과시킴으로써 확률로써 다룰 수 있게 됩니다.



2. Tensorflow로 구현하기


이를 Tensorflow로 구현하는 것은 매우 간단합니다.

기본적으로 위의 수식을 그대로 적어주면 되는데, 실제 코드와 함께 그림을 보면 다음과 같습니다.


그리고 위의 코드에서 hypothesis가 결국 우리가 원하는 것이고 그것은 이론에서 알아보았던 것 같이 확률로써 값이 나올 것입니다.


이렇게 우리가 Softmax 코드를 알아보았는데, 이에 걸맞는 Cost Function도 알아봐야겠죠?

코드는 아래와 같습니다.



이는 우리가 이론시간에 알아본 것과 같이 Y * log(hypothesis)에 대한 평균값을 내는 것입니다.

그리고 이러한 cost 값을 미분한 값에 learning rate를 곱해서 cost를 최소화하는 optimizer함수까지 구현할 수 있습니다.


위의 내용을 전체적인 코드로 살펴보면 아래와 같습니다.




위의 코드에서 y_data를 살펴보면 one-hot encoding으로 되어있는 것을 볼 수 있습니다.

one-hot encoding은 하나의 값만 1로써 한다는 방법입니다.


그리고 x와 y 데이터에 대한 placeholder에서 shape도 살펴보면, x는 4, y는 3의 shape을 가집니다.


이러한 코드를 통해서 실제로 데이터에 대한 테스트를 진행해볼 때, 그 결과를 보다 쉽게 확인하는 방법도 있습니다.



위의 Test내용을 보시면 우리가 설정했던 hypothesis를 이용함을 알 수 있고, 총 3개의 array가 test data로 사용되었습니다.

이때 각각에 대한 예측 결과값이 초록색으로 써져있는 값인데 이때, print 문에 써져있는 arg_max함수를 이용하면, 어떠한 값이 제일 맞는 값인지, 그 값에 대한 index를 반환합니다. 즉, 맨 아래의 [1 0 2] 값이 반환되는 것입니다.



이렇게 해서 Tensorflow에서 Softmax를 직접구현해보았습니다.

다음 포스팅에서는 조금 다른, Fancy Softmax에 대해서 구현을 해보도록 하겠습니다.

블로그 이미지

Tigercow.Door

Back-end / Python / Database / AI / Algorithm / DeepLearning / etc

댓글을 달아 주세요