728x90
Regression
> 어떤 Linear한 선을 찾는 것이 Regression(회귀) 학습이다.
> 이때 Hypothesis(Linear한 선을 그리기 전에 임의로 그리는 일종의 가설)를 설정해야하는데 그 식은 아래와 같다.
H(x) = Wx + b, W: 가중치 b: 편향값
Cost(Loss) function
> 어떤 식이 data에 가장 잘 맞는 식인지 찾기 위해 Cost function을 사용하여 Cost가 최소화되는 식을 찾아야 한다.
> 이때, H(x) = Wx + b이므로 아래와 같이 표현된다.
> 그럼 다음시간엔 cost값을 최소화하는 방법에 대해서 배워볼 것이다.
> 위와 같은 그림으로 코드가 실행됨
> 아래 코드는 순서대로 placeholder를 사용하지 않은 코드, 사용한 코드임
import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()
x_train = [1, 2, 3]
y_train = [1, 2, 3]
#variable은 우리가 아는 변수가 아닌 tensorflow가 내부적으로 변경되는 변수라고 이해
#즉, 학습하면서 스스로 해당 변수를 변경하게 됨
#shape과 name을 주게 됨
W = tf.Variable(tf.random_normal([1]), name='weight')
b = tf.Variable(tf.random_normal([1]), name='bias')
#H(x)
hypothesis = x_train * W + b
#cost를 구하는 코드
cost = tf.reduce_mean(tf.square(hypothesis - y_train))
#learning_rate는 파라미터(이때 파라미터는 W, b가 됨)의 변화율을 나타냄
#즉, 높으면 높을수록 정확하지 않은 학습률을 나타내고, 낮으면 낮을수록 정확한 학습률을 나타냄
#하지만 높으면 높을수록 시간이 적게 걸리고 낮으면 낮을수록 시간이 오래 걸림
optimizer = tf.train.GradientDescentOptimizer(learning_rate = 0.01)
train = optimizer.minimize(cost)
sess = tf.Session()
#Variable 노드를 실행시킴
sess.run(tf.global_variables_initializer())
#2000번 실행시키면서 20번마다 step에 대한 정보를 출력
for step in range(2001):
sess.run(train)
if step % 20 == 0:
print(step, sess.run(cost), sess.run(W), sess.run(b))
#run을 통해 return받은 cost, W, b의 값을 봐야함
#만약 print(cost)와 같이 출력하면 node의 정보가 출력됨
import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()
#x_train = [1, 2, 3]
#y_train = [1, 2, 3]
#placeholder를 통해 x_train, y_train을 대체한 후 사용도 가능함
X = tf.placeholder(tf.float32, shape=[None])
Y = tf.placeholder(tf.float32, shape=[None])
#variable은 우리가 아는 변수가 아닌 tensorflow가 내부적으로 변경되는 변수라고 이해
#즉, 학습하면서 스스로 해당 변수를 변경하게 됨
#shape과 name을 주게 됨
W = tf.Variable(tf.random_normal([1]), name='weight')
b = tf.Variable(tf.random_normal([1]), name='bias')
#H(x)
hypothesis = X * W + b
#cost를 구하는 코드
cost = tf.reduce_mean(tf.square(hypothesis - Y))
#learning_rate는 파라미터(이때 파라미터는 W, b가 됨)의 변화율을 나타냄
#즉, 높으면 높을수록 정확하지 않은 학습률을 나타내고, 낮으면 낮을수록 정확한 학습률을 나타냄
#하지만 높으면 높을수록 시간이 적게 걸리고 낮으면 낮을수록 시간이 오래 걸림
optimizer = tf.train.GradientDescentOptimizer(learning_rate = 0.01)
train = optimizer.minimize(cost)
sess = tf.Session()
#Variable 노드를 실행시킴
sess.run(tf.global_variables_initializer())
for step in range(2001):
#train에 대한 값은 필요 없으므로 _로 표현
cost_val, W_val, b_val, _ = sess.run([cost, W, b, train], feed_dict={X:[1, 2, 3, 4, 5], Y:[2.1, 3.1, 4.1, 5.1, 6.1]})
if step % 20 == 0:
print(step, cost_val, W_val, b_val)
#우리의 모델을 테스트
print(sess.run(hypothesis, feed_dict={X: [5]}))
print(sess.run(hypothesis, feed_dict={X: [2.5]}))
print(sess.run(hypothesis, feed_dict={X: [1.5, 3.5]}))
728x90
'AI > 모두를 위한 딥러닝 정리' 카테고리의 다른 글
Day6. Softmax (0) | 2022.04.11 |
---|---|
Day5. Logistic Classification과 Logistic Regression (0) | 2022.04.01 |
Day4. multi-variable linear regression (0) | 2022.03.21 |
Day3. Gradient descent algorithm (0) | 2022.03.05 |
Day1. Machine Learning에서 사용하는 단어 (0) | 2022.02.26 |
댓글