일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 다이나믹프로그래밍
- C/C++
- binary search
- BFS
- Python
- 릿코드
- 알고리즘
- 스프링 프레임워크
- STL
- 프로그래밍언어론
- 백준
- 머신러닝
- 스타벅스
- Spring Framework
- spring
- 프로그래머스
- leetcode
- 라인
- Java
- 시애틀
- jvm
- 모두를 위한 딥러닝
- 백트래킹
- 라인플러스
- 파이썬
- dfs
- C++
- 벤쿠버
- 딥러닝
- DP
- Today
- Total
케이스윔의 개발 블로그
[Lab4-1&4-2] Multi-variable regression 및 Loading Data from file 본문
<Multi-variable Linear regression>
import tensorflow as tf
#이 경우에는 x1, x2, x3으로 세개뿐이지만 아주 많이 늘어난다면 코드가 복잡해지고 사용할 수 없다!
x1_data = [73., 93., 89., 96., 73.]
x2_data = [80., 88., 91., 98., 66.]
x3_data = [75., 93., 90., 100., 70.]
y_data = [152., 185., 180., 196., 142.]
x1 = tf.placeholder(tf.float32)
x2 = tf.placeholder(tf.float32)
x3 = tf.placeholder(tf.float32)
Y = tf.placeholder(tf.float32)
w1 = tf.Variable(tf.random_normal([1]), name='weight1')
w2 = tf.Variable(tf.random_normal([1]), name='weight2')
w3 = tf.Variable(tf.random_normal([1]), name='weight3')
b = tf.Variable(tf.random_normal([1]), name='bias')
hypothesis = x1*w1 + x2*w2 + x3*w3 + b
cost = tf.reduce_mean(tf.square(hypothesis - Y))
optimizer = tf.train.GradientDescentOptimizer(learning_rate=1e-5)
#learning_rate는 0.001로 준 것->낮게 준 것!
train = optimizer.minimize(cost)
sess = tf.Session()
sess.run(tf.global_variables_initializer())
for step in range(2001):
cost_val, hy_val, _ = sess.run([cost, hypothesis, train],
feed_dict={x1:x1_data, x2:x2_data, x3:x3_data, Y:y_data})
if step %10 == 0:
print(step, "Cost: ", cost_val, "\nPrediction: ", hy_val,"\n")
#결과를 보면 cost는 점점 줄어들고 prediction값은 실제값과 가까워지는 것을 확인할 수 있다.
<Matrix를 사용해서 Multi-variable Linear regression>
import tensorflow as tf
#Matrix를 이용하기 위해 하나의 instance들을 묶어서 배열로 값을 준다.
#이전에 값 하나하나씩 줄 때보다 훨씬 간단하게 나타낼 수 있음을 알수있다.
x_data = [[73.,80., 75.],[93.,88., 93.], [89., 91., 90.],
[96.,98., 100.], [73., 66., 70.]]
y_data = [[152.], [185], [180.], [196.], [142.]]
#X는 shape에 n개로 잡기위해 None을 해주고 각 element를 3으로 잡아준다.
#Y도 n개를 예측하기때문에 None과 element는 예측 할 값이 1개임을 뜻한다.
X = tf.placeholder(tf.float32, shape=[None, 3])
Y = tf.placeholder(tf.float32, shape=[None, 1])
#3개가 들어와서 1개로 나간다!
W = tf.Variable(tf.random_normal([3,1]), name='weight')
b = tf.Variable(tf.random_normal([1]), name='bias')
hypothesis = tf.matmul(X, W) + b
#행렬의 곱을 통해서 계산한다. 이 부분을 제외하고는 위의 과정과 같다.
cost = tf.reduce_mean(tf.square(hypothesis - Y))
optimizer = tf.train.GradientDescentOptimizer(learning_rate=1e-5)
train = optimizer.minimize(cost)
sess = tf.Session()
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: ", hy_val, "\n")
<Loading Data from file>
많은 학습데이터가 있을 경우 주로 .csv 파일을 이용한다
* 파이썬의 slicing
num = range(5)
print nums -> [0, 1, 2, 3, 4 ]
print nums[2:4] -> 2에서부터 4-1까지 즉 2~3번째 아이 [2, 3]
print nums[2:] -> 2부터 끝까지 [2, 3, 4]
print nums[:] -> 전체를 가져온다 [0, 1, 2, 3, 4]
print num[:-1] -> -1은 끝을 뜻하므로 처음부터 끝보다 한칸 앞까지 [0, 1, 2, 3]
* numpy의 강력한 slicing! 2차원 array에서도 가능하다.
b = np.array[[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]
b[:, 1] -> [2, 6, 10]콤마앞의 :은 전체를 가져오라는 뜻이고 콤마 뒤의 1은 1번 index를 가져오라는 뜻이므로 각 행의 1번 index를 전부가져온다.
b[-1] -> [9, 10, 11, 12] -1이 젤 끝을 가리키므로 젤 끝 행을 가져온다.
b[-1, :] -> [9, 10, 11, 12] -1이 젤 끝을 가리키고 :가 전체를 가리키므로 젤 끝 행을 전부 가져온다.
b[0:2, :] ->[[1, 2, 3, 4][5, 6, 7, 8]] 앞의 0:2는 0~1행을 가리키고 뒤의 :는 전체를 가리킨다.
import numpy as np
#파일이름을 주고 자를 delimiter를 지정해준다. 전체의 데이터가 같은 데이터타입이어야한다.
xy = np.loadtxt('data-01-test-score.csv', delimiter=',', dtype=np.float32)
x_data = xy[:, 0:-1]
#:라는 의미는 n행을 전부 가지고 올 것이고, 0~마지막 열의 앞까지를 가지고 온다.
y_data = xy[:, [-1]]
#n행을 전부 가지고 오고, 맨 마지막하나만 가지고 오겠다.
print(x_data.shape, x_data, len(x_data))
print(y_data.shape, y_data)
#뒤의 과정은 직접 입력했을 때와 같다.
<Queue Runners>
여러개의 파일에서 input을 가지고 온다면 큐에 넣어두고 reader로 연결해서 데이터를 읽은 다음에 decoder에 보내고 다시 큐에 쓴다. 어떤 batch만큼 읽어서 쓴다.
1. file들이 몇개인지를 확인하고 file의 list를 만들어준다.
filename_queue = tf.train.string_input_producer(['data-01-test-score.csv', 'data-02-test-score.csv', ...], shuffle=false, name='filename_queue')
2. file을 읽을 reader를 만들어준다. key, value를 나눠서 읽자!
reader = tf.TextLineReader()
key, value = reader.read(filename_queue)
3. value값을 어떻게 parsing할 것인가를 결정한다.
#기본형태의 타입을 정해줄 수 있다.
record_defaults = [[0.], [0.], [0.], [0.]]
xy = tf.decode_csv(value, record_defaults=record_defaults)
텐서플로의 batch의 값에 따라 읽어온다.
train.x_batch, train_y_batch = tf.train.batch([xy[0:-1], xy[-1:]], batch_size =10)
sess = tf.Session()
coord = tf.train.Coordinator()
threads = tf.train.start_queue_runners(sess=sess, coord=coord)
for step in range(2001):
#batch만큼 데이터를 가지고 오는 것
x_batch, y_batch = sess.run([train_x_batch, train_y_batch])
....
coord.request_stop()
coord.join(threads)
'모두를 위한 딥러닝' 카테고리의 다른 글
[Lab05] Logistic classification 구현하기 (0) | 2018.05.07 |
---|---|
[Lec5-1&5-2] Logistic Classification의 가설 함수 정의와 cost 함수 설명 (0) | 2018.05.06 |
[Lec04] Multi-variable Linear regression 이란? (0) | 2018.04.29 |
[Lec03] Linear Regression의 cost 최소화 알고리즘의 원리 설명 (0) | 2018.04.29 |
[Lec02] Linear Regression의 Hypothesis와 cost 설명 (1) | 2018.04.26 |