TigerCow.Door


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

이번 포스팅에서는 지난 포스팅에서 구현했던 hypothesis 함수와 cost함수를 통해 Linear Regression에서의 cost를 최소화해보도록 하겠습니다.


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

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

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



1. Simplified hypothesis


우리가 직접 텐서플로우를 사용하기전에 hypothesis를 보다 간략하게 정의해봅니다.



위의 수식과 같이 hypothesis와 cost함수를 정의해보았습니다.



2. cost 최소화


그럼 이제 tensorflow로 코드를 구현해보겠습니다.

그전에 추후 그래프를 확인하기 위해 모듈하나를 설치해야합니다.

metplotlib 이라는 건데 tensorflow 가상환경으로 들어가기전에 아나콘다에서 다음과 같은 명령어를 실행합니다.


pip install metplotlib


그리고 active tensorflow 명령어를 통해 텐서플로우 가상환경으로 들어가서 python을 실행합니다.


먼저 tensorflow와 matplotlib.pyplot 을 임포트하고 아래와 같이 코드를 작성합니다.



코드를 보시면, 먼저 필요한 모듈을 임포트했고, X와 Y에 대한 값을 지정하였습니다.

이후 hypothesis와 cost함수를 구현하였습니다.

그리고 session을 열고 초기화를 하였습니다.

그리고 그래프를 그리기 위해 W값과 cost의 값을 저장시킬 리스트를 만들고

for 문을 이용하여 -30부터 50까지 0.1 간격으로 돌립니다.

그리고 W_val와 cost_val를 통해 그래프를 그렸습니다.


위와 같은 코드를 작성하면 아래와 같은 그래프가 나타납니다.



위의 그래프에서 x축은 W이고 y축은 cost입니다.

그래프를 보면 알겠지만 해당 값을 최소화하는 W는 1입니다.


이제 우리의 목표는 이러한 W를 자동으로 찾아내는 것입니다.



3. Gradient descent


위에서 확인한 W를 Gradient descent를 이용하여 찾아냅니다.

즉, 미분을 이용하는 것입니다.



이제 위와 같은 식을 식 아래에 있는 코드처럼 텐서플로우에서 구현함으로써 cost 최소화를 구현합니다.

여기서 알파는 learning_rate입니다.


따라서 전체코드는 아래와 같습니다.



우리가 지난 포스팅에서 구현한 Linear Regression과 거의 동일합니다.

중간쯤에서 확인하시면 위에서 본 코드가 추가된 것을 확인할 수 있습니다.

여기서 우리가 원하는 것은 W가 1이되는 것입니다.

이러한 코드를 실행시켜보면 아래의 사진과 같습니다.



결과를 보면 cost가 점점 작아지면서 W가 1에 가까워지는것을 볼 수 있습니다.


물론 우리가 텐서플로우를 사용하다보면 아래와 같은 코드로 매우 쉽게 cost를 최소화할 수 있습니다.



위의 식을 이용해서 다양한 값들로 테스트를 해도 동일한 결과를 가지는 것을 확인하실 수 있습니다.



이렇게 해서 Linear Regression에서 cost를 최소화하는 방법에 대해서 알아보았습니다.

다음 포스팅에서는 multi-variable을 다뤄보도록 하겠습니다.

블로그 이미지

Tigercow.Door

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

댓글을 달아 주세요



안녕하세요.

이번 포스팅에서는 TensorFlow를 통해 간단한 Linear Regression을 구현해보도록 하겠습니다.


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

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

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



1. Tensorflow 시작하기


지난 포스팅에서 윈도우 환경에서 tensorflow를 설치해보았습니다.

설치방법은 지난 포스팅을 참고하시면 좋을 것 같습니다.

먼저 다시 한번 tensorflow가 정상적으로 동작하는지 확인하겠습니다.

아나콘다를 실행시키고 아래 명령어를 통해 텐서플로우 가상환경을 실행합니다.


activate tensorflow


그리고 파이썬으로 들어가서 텐서플로우를 임포트합니다.


$ python

>>> import tensorflow as tf




그럼 이제 간단한 Linear Regression을 구현하겠습니다.



2. Linear Regression 구현하기


먼저, 우리는 hypothesis를 아래와 같은 식으로 나타냅니다.


H(x) = Wx + b


그리고 여기서 매우 간단하게 하기 위해 x와 y값을 아래와 같이 설정합니다.


x_train = [1,2,3]

y_train = [1,2,3]


그리고 W와 b를 Variable로 설정합니다.

근데 여기서 Variable은 프로그래밍에서 사용하는 변수와는 조금 다릅니다.

쉽게 생각해서 해당 Variable은 텐서플로우가 사용하는 Variable이다라고 생각하시면 됩니다.

다시 말해, 이를 실행하면 텐서플로우가 설정하게 되는 Variable이라는 것입니다.

우리가 이 Variable을 만들때 그 shape이 어떻게 되는지 함께 선언을 합니다.


그리고 처음 알아 본 것처럼 hypothesis 식을 함께 설정합니다.


또한 cost의 식도 함께 설정해줍니다.


위의 내용을 코드로 작성해보면 아래 사진과 같습니다.



여기서 제일 아래, reduce_mean이라는 것은 어떤 tensor가 주어졌을 떄 그에 대한 평균을 내주는 것입니다.


그럼 이제 cost까지 주어졌는데, 그 다음 작업은 cost를 최소화하는 작업입니다.

이는 일단 아래의 코드로 구현되는 것이라고 생각하시면 되겠습니다.



그럼 여기까지 해서 일단 그래프를 만들었습니다.

그리고 우리가 해줘야하는 것은 session을 만들어서 실행시켜줘야 합니다.



위의 코드처럼 작성합니다.

for문 아래에서 sess.run(train) 을 통해서 세션이 실행되고

총 2000천 반복중에서 20번 마다 우리가 보고 싶은 값을 출력하게 하였습니다.

이렇게 해서 아래와 같은 결과가 출력됩니다.



결과값을 보시면 처음에 나타나는 cost는 점점 작아지고, W값은 우리가 기대한 것과 같이 점점 1로 가까워 집니다.



3. Placeholders 이용하기


지난 시간에 했던 것처럼 처음에 직접 값을 넣지 않고, placeholder를 이용하여 나중에 값을 입력할 수 있습니다.

placeholder를 이용한 코드는 아래와 같습니다.



위의 코드를 보시면, 처음에 x_train, y_train으로 값을 주었던 것 대신에

placeholder를 통한 X, Y를 이용하며 뒤에서 feed_dict에서 값을 주는 것을 볼 수 있습니다.


이러한 코드에 의한 결과 값은 아까와 같이 cost가 점점 작아지고 w 값이 1에 가까워지는 결과와 동일합니다.



이러한 placeholder를 이용하면 우리가 linear regression을 만들고 학습을 할때 학습데이터를 우리가 원하는 값으로 넣어줄 수 있습니다.



전체적으로 정리를해보면

이번 포스팅에서는 tensorflow를 통해 Hypothesis를 만들어보았습니다.

그리고 placeholder를 이용하여 fedd_dict를 통해 우리가 원하는 값을 입력하고 그에 대한 값을 도출해 보았습니다.

다음 포스팅에서는 해당 linaer regression의 cost를 최소화하는 tensorflow를 구현해보도록 하겠습니다.



블로그 이미지

Tigercow.Door

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

댓글을 달아 주세요



안녕하세요.

머신러닝 이론을 학습하면서 동시에 텐서플로우 실습을 진행합니다.

전반적인 이야기는 머신러닝 첫번째 포스트에서 확인하시면 되겠습니다.


먼저 이번 포스팅에서는 텐서플로우의 설치와 간단한 이용에 대해서 설명하도록 하겠습니다.


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

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

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



1. 텐서플로우(TensorFlow)란?


아주 간단하게나마 텐서플로우(TensorFlow)를 알아보면 다음과 같습니다.

Tensor Flow란 data flow graphs를 사용해서 numerical computation을 하는 것입니다.

또한 많은이가 사용하는 python을 기반으로 합니다.


그럼 이때 말하는 data flow graphs란 무엇일까요?

각각의 노드에는 operations으로 표현되고, 각각의 엣지들은 data arrays로 표현됩니다.

그리고 이러한 노드와 엣지들을 통해서 내가 원하는 연산을 하고 결과를 얻을 수 있습니다.



2. 윈도우에서 텐서플로우 설치하기


먼저 이런 텐서플로우설치 방법은 개인의 OS에 따라서 다를 수 있습니다.


윈도우에서 학습중이신 분들은 아래 방법을 따라하시면 되겠습니다.

먼저 텐서플로우를 사용하기 위해 파이썬과 아나콘다가 설치되어야 합니다.

파이썬과 아나콘다는 공식홈페이지에서 쉽게 다운로드 하실수 있기 때문에 생략하도록 하겠습니다



먼저, 아나콘다를 실행시키고 pip를 업그레이드 합니다.


python -m pip install --upgrade pip




그리고 텐서플로우를 사용하기 위한 Conda 가상환경을 만듭니다.


conda create -n tensorflow python=3.5




그리고 만들어진 가상환경을 실행합니다.


activate tensorflow




그러면 프롬프트가 'tensorflow'로 바뀐 것을 확인하실 수 있습니다.

해당 가상환경에 텐서플로우를 설치합니다.


pip install tensorflow




이제 해당 가상환경에서 텐서플로우를 활용합니다.

설치가 정상적으로 이루어졌는지 확인하기 위해 python터미널을 열도록 합니다.


(tensorflow) > python




그리고 아래와 같은 코드를 입력하여 텐서플로우의 구동을 확인합니다.



위의 코드들이 오류없이 작동한다면 텐서플로우가 정상적으로 설치된 것입니다.




3. 텐서플로우 사용해보기


저희가 본격적으로 텐서플로우를 실습하기전에 간단하게 나마 사용을 해보도록 하겠습니다.

먼저 아래 사진을 통해 코드를 확인합니다.



먼저 node1, node2, node3 을 만들었습니다.


node1 = tf.constant(3.0, tf.float32)


에서 먼저 맨 뒤의 tf.float32 는 자료형을 말합니다.

즉, node1 이란 것은 32bit float형으로 만들어진 3.0의 상수값을 말합니다.


node2 또한 동일합니다.


그리고 node3 은 node1과 node2 를 더하는 노드입니다.


그리고 결과를 확인하기 위해


print("result : ", node3)


을 입력하니 오류가 발생합니다. 오류의 원인으로는 node3이 어떤 값이 아니라 노드이기 때문입니다.

즉, node3은 operation으로써 존재합니다.

따라서 올바른 결과를 확인하기 위해


print("result: "m sess.run(node3))


를 입력해야 합니다.


하지만, 이러한 방법은 node1과 node2에 항상 미리 값을 넣어줘야만 합니다.

이와 다른 방법으로는 무엇이 있을까요?

다음의 코드는 a, b 노드에 미리 값을 넣지 않고 나중에 값을 넣으면서 덧셈 값을 출력합니다.



a와 b 노드를 만들때 constant가 아닌 placeholder로 만들면서 데이터의 타입만 설정해 줍니다.

그리고 출력시에 feed_dice= 를 통해서 각각의 노드에 알맞은 값을 넣어주면 됩니다.


지금 코드가 정확히 이해가 가지 않더라도 너무 힘들어 하지 마시고 천천히 따라오시면 됩니다.

아래 그림에서 전체적인 과정을 확인하겠습니다.





우리가 위에서 코드로 간략하게나마 사용해본 텐서플로우는 위의 그림에서 나타내주고 있습니다.


1. 텐서플로우 operations을 사용한 그래프를 만듭니다. 즉 노드와 엣지를 통해서 그래프를 만들어 냅니다.


2. operations을 실행시킵니다. 이때, placeholder에 알맞은 값 또한 함께 입력합니다.


3. 그래프를 통해 업데이트 된 변수의 값을 확인합니다.


생각보다 간단하죠?

노드와 엣지를 통해 그래프를 만들고 그러한 그래프들간의 flow로 구동되는 것을 꼭 기억하세요.



그럼 다음 포스팅에서는 실제로 머신러닝에서 사용되는 Linear regression을 텐서플로우로 만들어보도록 하겠습니다.



블로그 이미지

Tigercow.Door

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

댓글을 달아 주세요