관리 메뉴

ComputerVision Jack

[모두의 딥러닝 Chapter02] 본문

DeepLearning/DL_ZeroToAll

[모두의 딥러닝 Chapter02]

JackYoon 2020. 1. 13. 23:26
반응형

딥러닝에 많은 관심과 학생들에게 좋은 강의를 해주시는 김성훈 교수님의 강의를 스스로 정리했습니다.

많은 부분을 배울 수 있어서 다시한번 감사의 인사를 드립니다.

 

[02-1 linear_regression]

Linear Regression (선형 회귀)

회귀란 특정한 value를 지도학습을 통해 예측하는 것을 말합니다.

딥러닝의 기본 과정은 우선

1. data set 정의

2. weight과 bias 생성

3. hypothesis 정의

4. cost 구하기

5. 경사 하강법 실행 

위 단계로 크게 그룹화 되는 것을 알수 있습니다.

 

import tensorflow as tf

tf.set_random_seed(777)

# 텐서 플로우를 import하고 난수 발생 seed를 설정합니다.

제 생각으로는 random_seed(777)하는 과정은 컴퓨터 마다 난수발생하는 방법을 통일 시키는 것 같습니다.

 

x_train = [1, 2, 3]

y_train = [1, 2, 3]

#x와 y 데이터 생성

 

W = tf.Variable(tf.random_normal([1]), name = 'weight')

b = tf.Variable(tf.random_normal([1]), name = 'bias')

#가중치와 바이어스를 설정

variable를 만드는데 값을 random_normal 정규화 분포의 값으로 무작위로 제작, 모양은 스칼라 이기 때문에 1

 

hypothesis = x_train * W + b

# 가설(모델) 제작 : 아마도 1차원의 분포를 따를 것이다.

 

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

# 예측에서 실제 y값을 빼면 = 오차

오차를 제곱해서 평균을 구하면 2차원의 함수가 제작된다. 

제곱하는 이유는 절대값을 사용할 수도 있지만 음수를 방지하기 위해 사용하는 것 같다.

reduce_mean() : 평균 구하는 메소드

square() : 제곱을 구하는 메소드

 

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

# 경사 하강법을 통하여 cost를 최소화 시킨다. 하강하는 범위 = learning_rate

 

with tf.Session() as sess:

  sess.run(tf.global_variables_initializer())

 

  for step in range(2001):

    _, cost_val, W_val, b_val = sess.run([train, cost, W, b])

 

    if step % 20 == 0:

      print(step, cost_val, W_val, b_val)

 

#우선 with를 통하여 구역을 제정한다.

Session()의 객체 sess를 사용하여 실행시킨다.

우선 tf.global_variables_initializer()을 통하여 변수를 초기화 시킨다.

sess.run()메소드를 사용하여 학습을 시킨다.

 

[02-2 linear_regression_feed_dict]

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

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

# 대이터를 나중에 던져줄 거기 때문에 미리 공간만 확보해 놓는다고 생각하면 편하다.

scalar 값을 던져 주기 때문에 shape은 [None] 몇개가 들어와도 상관 없기 때문에.

 

with tf.Session() as sess:

  sess.run(tf.global_variables_initializer())

 

  for step in range(2001):

    _, cost_val, W_val, b_val = sess.run([train, cost, W, b],

                                         feed_dict = {X: [1, 2, 3], Y: [1, 2, 3]})

    if step % 20 == 0:

      print(step, cost_val, W_val, b_val)

# placeholder로 공간 확보해 놓은곳에 실질적으로 학습을 할때 데이터를 feed_dict으로 넘겨준다.

feed_dict을 통하여 placeholder로 만들어논 공간에 값을 대입할 수 있다.

따라서 x와 y에 feed_dict을 통해 학습할 때 [1, 2, 3]을 던져주는 모습

 

그 이외의 코드는 동일하다.

 

[02-3 linear_regression_feed_dict]

W = tf.Variable([0.3], tf.float32)

b = tf.Variable([-0.3], tf.float32)

#위의 예제와 다른점은 tf.random_normal을 통해 랜덤한 수를 던져준 것이 아니라 특정한 value로

가중치와 편향을 초기화 했다는 점이다.

 

나머지 코드는 02-2 코드와 동일하다.

02-3-linear_regression_tensorflow.org.ipynb
0.00MB
02-2-linear_regression_feed.ipynb
0.01MB
02-1-linear_regression.ipynb
0.01MB

반응형

'DeepLearning > DL_ZeroToAll' 카테고리의 다른 글

[모두의 딥러닝 Chapter07]  (0) 2020.01.19
[모두의 딥러닝 Chapter06]  (0) 2020.01.17
[모두의 딥러닝 Chapter05]  (0) 2020.01.16
[모두의 딥러닝 Chapter04]  (2) 2020.01.15
[모두의 딥러닝 Chapter03]  (0) 2020.01.14
Comments