본문 바로가기
DeepLearning Framework & Coding/Tensorflow 1.X

[코드로 이해하는 딥러닝 7] - .txt(.csv)파일 불러오기

by 노마드공학자 2020. 12. 20.

[코드로 이해하는 딥러닝 0] - 글연재에 앞서 https://limitsinx.tistory.com/27

[코드로 이해하는 딥러닝 1] - Tensorflow 시작 https://limitsinx.tistory.com/28 

[코드로 이해하는 딥러닝 2] - Tensorflow 변수선언 https://limitsinx.tistory.com/29

[코드로 이해하는 딥러닝 3] - Tensorflow placeholder변수 https://limitsinx.tistory.com/30

[코드로 이해하는 딥러닝 4] - 선형회귀(Linear Regression) https://limitsinx.tistory.com/31

[코드로 이해하는 딥러닝 5] - 다중선형회귀(Multiple Linear Regression) https://limitsinx.tistory.com/32

[코드로 이해하는 딥러닝 6] - 회귀(Regression)에 대한 다른 접근 https://limitsinx.tistory.com/33

 

※이 전글에서 정리한 코드/문법은 재설명하지 않으므로, 참고부탁드립니다

 

이전 코드

이제까지는 위의 코드와 같이, x_data와 y_data를 일일이 손으로 다 쳐서 학습시켜보았습니다.

 

몇개의 예제를 돌려보는데는 문제가 없지만

 

앞으로 저희가 돌려야 하는 데이터들은 수천개에서 수만개의 데이터들이니 일일히 손으로 쳐줄수가 없습니다.

 

따라서, txt파일이나 excel, csv파일을 자동으로 불러와서 데이터를 분류하여 x_train과 y_train값에 넣어주는 작업을 할줄 알아야 합니다.

 

[코드 전문]

"voltage_test.txt"라는 파일을 불러와서 x_data와 y_data를 자동으로 채워넣어보고자 합니다.

 

해당 파일은 내가 현재 프로그램을 돌리고 있는 위치에 존재해야합니다.

 

콘솔창을 보시면, 아래와 같이 표시되어있는걸 발견할 수 있으셀텐데, 이게 파일의 경로입니다.

(사람마다 모두 다릅니다. 저의 경로는 하기와 같습니다.)

 

 

해당 경로의 위치에 txt파일이 저장되어있어야 하구요,

저는 아래에서 두번째에 voltage_test.txt 라고 저장되어있는것을 확인하실 수 있습니다.

 

이렇게 경로를 통일 시켜주었다고 하면, 필요한 사전준비는 모두 끝난것입니다!

 

[코드 분석-1]

★ xy=np.loadtxt('voltage_test.txt', delimiter=',', dtype=np.float32)

 

xy라는 변수에 "voltage_test.txt" 를 불러오는 코드입니다.

delimiter라는것은 변수를 어떻게 구분했냐는 것인데

 

현재 저의 voltage_test.txt 안에는 이런 형태로 정리되어있습니다.

 

1,2,3

4,7,10

3,17,9

...

 

즉, "쉼표" 단위로 데이터를 구분하겠다는 뜻이며,

x_data = xy[:, 0:-1] 이라는 뜻은, voltage_test.txt 안에서 맨끝에 1개빼고 차례대로 x_data로 넣겠다를 의미합니다.

1,2

4,7

3,17

이렇게 저장한다는 뜻이죠

 

y_data = xy[:,[-1]] 은, voltage_test.txt의 각 줄마다 맨끝의 값을 y_data로 저장하겠다는 뜻입니다.

3,

10,

9

이렇게 저장한다는 뜻이죠

 

복잡하지않습니다. 내가원하는 텍스트파일을 불러와서 변수들에 저장해주는것이죠

 

[코드 분석-2]

이하의 코드는 이전 글에서 정리한것과 모두 동일합니다.

 

 

Summary

 

이번 글에서 정리한 부분은, 머신러닝을 위해서는 아주 필수적인 항목입니다.

 

수만개의 데이터를 학습시키려면 보통 excel이나 txt형태로 데이터를 가지고 있는 경우가 많기에

 

이것들을 어떻게 자동으로 불러와서 x_train, y_train에 대응시키고 진행할것이냐..를 아느냐 모르느냐는 큰 차이죠

 

이를 통해 머신러닝에 한발짝 더 다가서게 되었습니다!

 

[코드 공유]

import tensorflow.compat.v1 as tf

tf.disable_v2_behavior()

import numpy as np

 

xy=np.loadtxt('voltage_test.txt',delimiter=',',dtype=np.float32)

x_data = xy[:, 0:-1#파이썬 list의 슬라이스 기능(array 분할 ex. array[2:4]), xy[:,0:-1] : 맨끝 바로 전까지 가져옴

y_data = xy[:,[-1]] #array의 low의 맨끝에 값을 다 불러옴 = y

 

x=tf.placeholder(tf.float32, shape=[None,2]) #shape 크기 중요

y=tf.placeholder(tf.float32, shape=[None,1])

w=tf.Variable(tf.random_normal([2,1]))

b=tf.Variable(tf.random_normal([1]))

 

hypothesis = tf.matmul(x,w)+b

cost=tf.reduce_mean(tf.square(hypothesis - y))

train = tf.train.GradientDescentOptimizer(learning_rate=0.0001).minimize(cost)

 

sess=tf.Session()

sess.run(tf.global_variables_initializer())

 

for step in range(10001):

    cost_val, hy_val, _, W_val, b_val = sess.run([cost, hypothesis, train, w, b],

     feed_dict={x:x_data, y:y_data})

    if step % 1000 == 0:

        print("\n\n",step,"n번 학습 cost :", cost_val, "Y값예측 :", hy_val, 

        "W : ", W_val, " b : ",b_val)

 

print("Voltage" , sess.run(hypothesis,feed_dict={x:[[40,60]]}))

댓글