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)
      추가적으로 게시한 관련 포스팅에 대해 금일 중 출처를 추가하여 혼동이 없도록 조치하겠습니다.
      불편을 드렸다면 다시한번 죄송합니다.