# Tensorflow : Logistic Regression
Tensorflow를 공부하면서 느끼지만, 이 녀석은 '머신러닝'에 매우 특화된 툴이라고 생각한다.
거의 모든(거의라는 말을 굳이 안적어도 될 정도로) 계산 과정에 대한 함수를 제공한다.
우선 오늘 공부한 내용에 대한 코드는 여기에 있다.
https://github.com/hunkim/DeepLearningZeroToAll/blob/master/lab-05-1-logistic_regression.py
개인적인 여담이지만, pycharm을 설치하고나서 텐서플로우 코딩이 한결 수월해졌다.
미리 이런 툴에 대한 정보를 알았으면 좋았을것을!
무튼 이번에는 코드 작성 중에 새롭게 알게 된 사실을 좀 적어보려고 한다.
이번 코드에서 사용되는 x, y 데이터 값은 다음과 같다.
x는 총 6행으로 이루어져 있으며, 각 행은 2 열로 이루어진 행렬로 구성한다.
y는 총 6행으로 이루어져 있으며, 각 행은 1열로 이루어진 행렬로 구성한다.
중요한 것은 다음 코드인데,
거의 모든(
우선 오늘 공부한 내용에 대한 코드는 여기에 있다.
https://github.com/hunkim/DeepLearningZeroToAll/blob/master/lab-05-1-logistic_regression.py
개인적인 여담이지만, pycharm을 설치하고나서 텐서플로우 코딩이 한결 수월해졌다.
미리 이런 툴에 대한 정보를 알았으면 좋았을것을!
무튼 이번에는 코드 작성 중에 새롭게 알게 된 사실을 좀 적어보려고 한다.
이번 코드에서 사용되는 x, y 데이터 값은 다음과 같다.
x는 총 6행으로 이루어져 있으며, 각 행은 2 열로 이루어진 행렬로 구성한다.
y는 총 6행으로 이루어져 있으며, 각 행은 1열로 이루어진 행렬로 구성한다.
중요한 것은 다음 코드인데,
W, b 각각의 값을 변수로 지정하고 랜덤하게 지정하려고 할 때를 보이고 있다.
W의 경우에는 tf.random_normal 값에 [2, 1]을 지정하고, b의 경우에는 [1]을 지정한다.
W는 x, y의 계산 과정에 개입하여 결과 값을 반환하기 때문에 [x의 열 갯수, y의 열 갯수]로 지정하고, b는 단순히 y의 값(마지막에 더해지기만 하면 되니까)에만 개입하기 때문에 [y의 열 갯수]로만 지정된다.
말이 좀 어려울 수 있는데, 자세히 읽어보면 이해 될 것이라고 판단...
우리가 이번 코드에서 만들어야 하는 식은 총 3가지다.
H(x)에 대한 식을 hypothesis라고 할 때, 다음과 같이 작성할 수 있다.
hypothesis = tf.sigmoid(tf.matmul(X, W) + b)
중요한 것은, 이전 블로그에서 보았던 sigmoid에 대한 식을 텐서플로우에서 제공하고 있다는 것이다.
만약 sigmoid 식이 없었다면? 우리는 아래와 같이 식을 일일이 적어줘야 했을 것이다.
tf.div(1., 1. + tf.exp(tf.matmul(X, W) + b))
실제로는 큰 차이가 없어보이지만, 프로그래머에게 한줄, 한단어의 절약은 매우 큰 의미라고 판단한다는!
Cost에 대한 식은 다음과 같이 작성할 수 있다.
cost = -tf.reduce_mean(Y * tf.log(hypothesis) + (1 - Y) * tf.log(1 - hypothesis))
그렇다면 Cost를 미분하면서 얻어지는 기울기에 대한 training set은 어떻게 작성할 수 있을까?
train = tf.train.GradientDescentOptimizer(learning_rate=0.01).minimize(cost)
learning rate를 0.01로 한다 가정한 상태로 식을 작성하였다.
뒤에 .minimize(cost)를 통해 최적의 cost 값을 확인한다.
이 후에 있는 모든 코드들은 기존에 있었던 코드를 사용하는 것이므로 자세히 다루지는 않겠다.
하지만 우리가 테스트하는 값들이 엄청나게 커지면, 우리가 코드상으로 일일이 입력하는 것은 매우 어려운 일이 될 것이다. 그렇다면 우리는 파일로 받아오면 된다. 마치 우리가 다른 프로그래밍 언어에서 다량의 데이터를 처리할 때 했던 것 처럼.
파일 입출력 방법에 대한 글은 '이곳'에서 확인하길 바란다. 물론 Queue Runner 방법도 있지만, 본 테스트 코드에서는 numpy를 사용했기 때문에 링크는 numpy로 달아둔다.
댓글
댓글 쓰기