일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- string 함수
- 시간복잡도
- 자료구조
- 입출력 패턴
- EOF
- double ended queue
- vscode
- 연결요소
- iOS14
- 프레임워크와 라이브러리의 차이
- 이분그래프
- string 메소드
- 알고리즘 공부방법
- 매크로
- k-eta
- Django란
- 구조체와 클래스의 공통점 및 차이점
- 표준 입출력
- getline
- c++
- 백준
- 장고란
- scanf
- 입/출력
- correlation coefficient
- 2557
- 엑셀
- Django의 편의성
- Django Nodejs 차이점
- UI한글변경
- Today
- Total
Storage Gonie
모두를 위한 딥러닝 10강 ML lab 04-2: TensorFlow로 파일에서 데이타 읽어오기 (new) 본문
모두를 위한 딥러닝 10강 ML lab 04-2: TensorFlow로 파일에서 데이타 읽어오기 (new)
Storage Gonie 2018. 9. 8. 18:31# 데이터를 쪼개기 위한 slicing 예제
예제1)
http://cs231n.github.io/python-numpy-tutorial
예제2)
# 텍스트 데이터를 읽어와 Multi-Variable Linear Regression 모델을 훈련시키는 예제
- 이거와 비슷한 형태로 row가 25개가 되는 데이터를 가지고 실험한다.
- 아래의 코드에서 유심히 볼 부분은 데이터를 load 해오고 이를 x데이터와, y데이터로 나누는 작업이다.
import tensorflow as tf
import numpy as np
tf.set_random_seed(777) # for reproducibility
xy = np.loadtxt('data-01-test-score.csv', delimiter=',', dtype=np.float32)
x_data = xy[:, 0:-1]
y_data = xy[:, [-1]]
# Make sure the shape and data are OK
print(x_data.shape, x_data, len(x_data))
print(y_data.shape, y_data)
# feed_dict로 모델에 위의 데이터를 공급하기 위함
X = tf.placeholder(tf.float32, shape=[None, 3])
Y = tf.placeholder(tf.float32, shape=[None, 1])
# 랜덤한 숫자로 초기화된 매개변수들
W = tf.Variable(tf.random_normal([3, 1]), name='weight')
b = tf.Variable(tf.random_normal([1]), name='bias')
# Hypothesis 노드 선언
hypothesis = tf.matmul(X, W) + b
# Simplified cost/loss function
cost = tf.reduce_mean(tf.square(hypothesis - Y))
# Minimize
optimizer = tf.train.GradientDescentOptimizer(learning_rate=1e-5)
train = optimizer.minimize(cost)
# Launch the graph in a session.
sess = tf.Session()
# Initializes global variables in the graph.
sess.run(tf.global_variables_initializer())
for step in range(2001):
cost_val, hy_val, _ = sess.run(
[cost, hypothesis, train], feed_dict={X: x_data, Y: y_data})
if step % 10 == 0:
print(step, "Cost: ", cost_val, "\nPrediction:\n", hy_val)
# Ask my score
print("Your score will be ", sess.run(hypothesis, feed_dict={X: [[100, 70, 101]]}))
print("Other scores will be ", sess.run(hypothesis, feed_dict={X: [[60, 70, 110], [90, 100, 80]]}))
'''
Your score will be [[ 181.73277283]]
Other scores will be [[ 145.86265564]
[ 187.23129272]]
'''
# 텐서플로우에서 메모리공간의 한계를 해결해주는 Queue Runners 시스템을 제공함
- 파일이 너무 큰 경우에 한번에 메모리에 올리기 힘든데 이를 위해서 텐서플로우가 제공하는 기능이다.
- 1. 여러개의 파일이름을 큐에 쌓고, shuffle의 여부를 결정한다.
- 2. 파일을 어떤 형식(Binary or Text or etc)으로 읽을 지 결정하고 key, value 형식으로 읽어들인다.
- 3. 읽어들인 value에 대해 비어있는 값에 default값을 넣어줄 수 있고 이를 큐에 쌓는다.
- 4. 학습할 때 필요한 배치 만큼씩 메모리로 읽어와서 학습을 시킨다.
https://www.tensorflow.org/programmers_guide/reading_data
# tf.train.batch 및 Queue Runner 시스템을 사용하기 위한 코드
- tf.train.batch는 데이터를 뽑아올리는 펌프같은 역할을 하고, 한번에 몇개씩 뽑아낼지와 x_data로 사용할 부분과 y_data로 사용할 부분을 표시해준다.
- 그 다음 이 노드를 sess.run으로 실행할 때 마다 데이터를 내어준다.
- 아래의 처음보는 코드들은 queue_runners를 사용하기 위한 부가적인 코드이다.
- coord = tf.train.Coordinator()
- threads = tf.train.start_queue_runners(sess=sess, coord=coord)
- coord.request_stop()
- coord.join(threads)
# 대량데이터가 필요한 모델을 위해 tf.train.batch 및 Queue Runner 시스템을 사용한 훈련모델 작성
import tensorflow as tf
filename_queue = tf.train.string_input_producer(['data-01-test-score.csv'], shuffle=False, name='filename_queue')
reader = tf.TextLineReader()
key, value = reader.read(filename_queue)
# Default values, in case of empty columns. Also specifies the type of the decoded result.
record_defaults = [[0.], [0.], [0.], [0.]]
xy = tf.decode_csv(value, record_defaults=record_defaults)
# collect batches of csv in
train_x_batch, train_y_batch = tf.train.batch([xy[0:-1], xy[-1:]], batch_size=10)
# placeholders for a tensor that will be always fed.
X = tf.placeholder(tf.float32, shape=[None, 3])
Y = tf.placeholder(tf.float32, shape=[None, 1])
W = tf.Variable(tf.random_normal([3, 1]), name='weight')
b = tf.Variable(tf.random_normal([1]), name='bias')
# Hypothesis
hypothesis = tf.matmul(X, W) + b
# Simplified cost/loss function
cost = tf.reduce_mean(tf.square(hypothesis - Y))
# Minimize
optimizer = tf.train.GradientDescentOptimizer(learning_rate=1e-5)
train = optimizer.minimize(cost)
# Launch the graph in a session.
sess = tf.Session()
# Initializes global variables in the graph.
sess.run(tf.global_variables_initializer())
# Start populating the filename queue.
coord = tf.train.Coordinator()
threads = tf.train.start_queue_runners(sess=sess, coord=coord)
for step in range(2001):
x_batch, y_batch = sess.run([train_x_batch, train_y_batch])
cost_val, hy_val, _ = sess.run([cost, hypothesis, train], feed_dict={X: x_batch, Y: y_batch})
if step % 10 == 0:
print(step, "Cost: ", cost_val, "\nPrediction:\n", hy_val)
coord.request_stop()
coord.join(threads)
# Ask my score
print("Your score will be ", sess.run(hypothesis, feed_dict={X: [[100, 70, 101]]}))
print("Other scores will be ", sess.run(hypothesis, feed_dict={X: [[60, 70, 110], [90, 100, 80]]}))
'''
Your score will be [[ 177.78144836]]
Other scores will be [[ 141.10997009]
[ 191.17378235]]
'''
# 배치의 순서가 shuffle 되었으면 좋겠다면 사용할 수 있는 함수
- 이외에도 여러가지 함수가 있으니 바로 아래의 링크를 참고
https://www.tensorflow.org/programmers_guide/reading_data
그림참고 : https://youtu.be/o2q4QNnoShY