TigerCow.Door

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

오늘은 TensorFlow에서 데이터 파일을 읽어와 multi-variable linear regression을 구현해보도록 하겠습니다.


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

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

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



1. Loading Data From File


데이터가 많아지면 이러한 데이터를 직접 입력하는게 힘들어 집니다.

이럴 경우 우리는 데이터들을 텍스트 파일로, 주로 csv파일로 저장하고 이를 불러오는 방법을 사용합니다.

지난 번 실습에서 진행된 데이터들을 바탕으로 아래와 같은 내용을 메모장을 통해 작성하여 바탕화면에 data-01-test-score.csv 라는 이름으로 저장하였습니다.



이제 이러한 파일을 numpy 모듈을 통해 배열로 읽어올 것 입니다.

그리고 우리가 해줘야 할 것은 어떤 데이터가 x 데이터이고, 어떤 데이터가 y 데이터인지 나누는 것입니다.

이제 여기서 파이썬에서 사용되는 리스트의 슬라이싱을 통해 x와 y의 데이터를 나눕니다.



위 사진은 Slicing에 대한 간략한 내용을 보여주고 있으며, 보다 자세한 것은 아래 포스팅을 참고하시면 좋을 것 같습니다.


파이썬(python) #6_ 리스트 자료형 : http://doorbw.tistory.com/77?category=677823


또한 우리는 numpy를 통해 아래 사진과 같이 보다 강력한 슬라이싱 기술을 사용할 수 있습니다.



b[1, 1] 에서 앞의 1은 첫번째 row를 말합니다. 그리고 뒤의 1을 통해 첫번째 인자를 가져오게 됩니다.

그렇다면 실제로 우리가 좀 전에 작성한 데이터 파일을 어떻게 가져올지 알아보겠습니다.


우리는 데이터 파일에 있는 숫자들 중 앞의 3개는 x 데이터, 맨 마지막 숫자는 y 데이터로 가져올 것입니다.

따라서 아래와 같은 코드를 통해 슬라이싱을 진행하면 됩니다.


import numpy as np

xy = np.loadtxt('C:\\Users\B.W.Moon\Desktop\data-01-test-score.csv',delimiter=',', dtype=np.float32)

x_data = xy[:, 0:-1]

y_data = xy[:,[-1]]


이때 파일의 경로를 올바르게 적어줘야 하며 특정 디텍토리의 이름이 U로 시작한다면 \ 하나가 아닌 \\ 두개를 사용하셔야 합니다.

슬라이싱이 제대로 되었다면 그 전 실습들에서 했던 것과 같이 tensorflow에 알맞은 코드를 작성합니다.



위의 코드는 지난번 실습에서 사용했던 코드들과 매우 유사하니 설명은 따로 생략하도록 하겠습니다.


헌데 만약 데이터의 크기가 너무 커서, 메모리가 감당하지 못할땐 어떻게 할까요?

이때, 텐서플로우에서 지원해주는 Queue Runners 를 이용하여 해결할 수 있습니다.



위의 사진과 같은 구조를 가진 Queue Runners는 특정 데이터를 불러와서 적당한 처리를 통해 우리가 필요한 데이터만 그때그때 메모리에 올려서 사용하는 구조입니다.

이를 사용하는 방법은 크게 3가지 순서로 나눌 수 있습니다.



처음에는 우리가 불러올 여러개의 데이터파일을 모두 적어줌으로써 queue에 올립니다.

그리고 파일을 읽은 reader를 설정해줍니다.

이후 우리가 불러오는 값(value)를 어떻게 parsing 할 것인가를 설정합니다.


그리고 텐서플로우에서 지원해주는 batch를 이용합니다.

batch 일종의 펌프같은 역할을 하여 데이터를 읽어올 수 있도록 해주는 것입니다.



위의 코드와 같이 batch를 이용하여 데이터를 어떻게 읽어올 것인지 슬라이싱 하여 설정합니다.

또한 batch_size 를 통해 한번에 몇개를 가져올 것인지 함께 설정합니다.

그 이후는 그 동안의 코드와 동일합니다.

단지, loop를 돌때 위에서 설정한 batch를 통해 session을 실행시킵니다.


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



물론 결과는 이전과 동일 합니다.

추가적으로 여러분께서 batch를 섞어서 사용하고 싶으시다면 shuffle_batch 라는 기능도 있으니 참고하시면 좋을 것 같습니다.





블로그 이미지

Tigercow.Door

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

댓글을 달아 주세요

  • ㅁㄴㅇㅁㄴㅇ 2020.07.02 14:28  댓글주소  수정/삭제  댓글쓰기

    출처는 안 밝히시나요

    • Favicon of https://doorbw.tistory.com BlogIcon Tigercow.Door 2020.07.02 14:42 신고  댓글주소  수정/삭제

      안녕하세요. 문범우입니다.
      우선, 출처와 관련되어 정확하게 안내드리지 못하여 불편을 드렸다면 죄송합니다.
      관련된 포스트들 중 첫번째 포스트에서 내용에 대한 출처를 안내드렸습니다. (https://doorbw.tistory.com/88)
      추가적으로 게시한 관련 포스팅에 대해 금일 중 출처를 추가하여 혼동이 없도록 조치하겠습니다.
      불편을 드렸다면 다시한번 죄송합니다.



안녕하세요.

오늘은 TensorFlow에서 multi-variable linear regression을 구현해보도록 하겠습니다.


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

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

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



1. Multi-Variable Linear Regression 구현하기


지난번 실습까지는 단순히 x와 y하나만 있는 간단한 실습이었는데

이제 multi-variable 실습을 통해 실제로 응용해볼 수 있습니다.


먼저 아래와 같은 표를 두고 생각해보겠습니다.






위의 표에서 나타내는 값들을 점수라고 생각합시다.

예를 들어, x1, x2, x3라는 여러번의 중간고사 점수가 있고 이제 Y라는 기말고사 점수를 예측하는 것입니다. 물론 보다 많은 x의 변수들, 출석이나 과제등의 점수가 있다면 보다 정확한 Y값 예측이 가능할 것 입니다.

그럼 먼저 가설식을 세워보도록 하겠습니다.

세개의 x 변수를 이용해서 아래와 같은 Hypothesis 식을 세웁니다.



여기서는 우리가 보다 간단하게 보기 위해서 bias 값은 생략하였습니다.


그리고 이를 위해 아래와 같은 TensorFlow 코드를 작성합니다.



그렇게 되면 아래의 결과가 나오게 됩니다.

결과를 살펴보면 우리가 예상했던 결과 값(y_data의 값)과 크게 다르지 않음을 알 수 있습니다.



하지만, 코드를 작성하면서 느꼈지만, 이는 많이 복잡하고 지저분한(?) 방법일 수 있습니다.

이를 해결하기 위해 우리는 Matrix를 사용합니다.


Matrix를 사용하면 아래와 같은 식을 통해 코드를 작성합니다.



위의 식을 참고하여 코드를 작성하면 아래와 같습니다.



hypothesis 이후의 코드는 구조상 동일하지만, 그 윗부분의 데이터 입력 부분을 확인하시면 이전보다 깔끔하고 간단한 코드 구현이 가능함을 확인할 수 있습니다.


위와 같은 코드를 통해 결과를 확인하여도 같은 결과 값을 가짐을 알 수 있습니다.



다음 포스팅에서는 이러한 multi-variable에서 우리가 일일이 값을 입력하는 것 대신, 실제로 파일 데이터를 불러와 구현해보도록 하겠습니다.







블로그 이미지

Tigercow.Door

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

댓글을 달아 주세요


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

이번 포스팅에서는 지난 포스팅에서 구현했던 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

댓글을 달아 주세요