# Tensorflow : Loading data from file with numpy

실제로 텐서플로우에 사용되는 값은 수백만개 이상이 될 수도 있기 때문에, 이를 일일이 코드로 입력한다는 것은 현실상으로 불가능하다.
그래서 대부분 '파일'로 값을 만들어서, 이를 텐서플로우에 적용시킨다.
다음과 같은 '파일'이 있다고 가정하자.
파일을 읽어와서 사용하기 위해, 우리는 numpy 를 import 한다.

import numpy as np

numpy를 이용하여 파일을 불러오는 코드는 다음과 같다.
(xy라는 값에 해당 파일의 내용을 대입할 것이다)

xy = np.loadtxt('data-01-test-score.csv', delimiter=',', dtype=np.float32)

delimiter는 각 값이 구분되는 '구분자'를 의미한다.
위의 파일 내용을 보다싶이, 구분자는 ,(콤마)로 구성되어 있다.
dtype은 값들의 타입을 의미한다. 물론, 해당 값들이 같은 타입으로 이루어져야 할 것이다.

이제 이를 slice라는 기능(?)을 이용해서 출력해야 하는데..
사실 잘 모르겠다. 아래와 같은 표현을 파이썬의 slice라고 한다고 한다.

nums = range(5)인 경우에 대한 각각의 코드 결과 값을 보여준다.

우선 우리에게 중요한건 '파일로부터 자료를 입력받는 것' 이므로
slice에 대한 내용은 다음의 추가 사이트를 참조하자 (나도 블로깅하고난 후 읽어볼 것이다)
1. hasecode: http://hashcode.co.kr/questions/74/파이썬-slice-notation-쓰는거좀-알려주세요
2. python webpage: https://docs.python.org/2/library/stdtypes.html#sequence-types-str-unicode-list-tuple-bytearray-buffer-xrange

그렇다면 만약 x_data = xy[:, 0:-1]은 무엇을 의미할까?
xy로 불러온 내용의 전체 행(5개)를 다 읽어오는데, 그 중 처음부터 마지막 미만까지를 불러오라는 의미이다. 즉 [73, 80, 75], [93, 88, 93], ..... [53, 46, 55]를 읽어오라는 의미이다.
그렇다면 y_data = xy[:, [-1]]은 무엇을 의미할까? 
xy로 불러온 내용의 전체 중 마지막 열만을 불러오라는 의미이다.
즉 y_data = [152, 185, 180 ... 101]의 형태가 될 것이다.

잘 읽어졌는지 확인하려면?
print(x_data.shape, x_data, len(x_data))
print(y_data.shape, y_data) 
뭐 이런식으로 적으면 볼 수 있겠지?

추가로 hypothesis = X * W + b가 되는데,
여기서 각 행렬 X와 W의 곱을 텐서플로우의 함수로 계산할 수 있다. 
tf.matmul(X, W)를 쓰면 간단하게 구할 수 있는데, 이를 이용한 hypothesis는 다음과 같다.

hypothesis = tf.matmul(X, W) + b

하지만 nump는 '적은 데이터'만을 처리할 수 있다는 단점이 있다.
사실 적은 데이터라는 기준이 어느정도인지를 모른다는... 
좀 더 큰 데이터 처리를 위한 방법은 다음 블로그에서 자세히 보도록 한다.

댓글