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

댓글을 달아 주세요



안녕하세요.

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

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


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


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

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

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

댓글을 달아 주세요