moduPlayGround / DeepLearning-Basic

모두를 위한 딥러닝 기초 코스 입니다.
4 stars 4 forks source link

[질문] cost 최소화. 추가질문 답변~ #12

Closed sukzoon1234 closed 5 years ago

sukzoon1234 commented 5 years ago

--cost 최소화를 구현하는 법--

1.직접 미분한 gradient를 이용해서 optimizer.minimize(cost) 해서 최소화 시키기 <코드1>


import tensorflow as tf

X = [1, 2, 3]
Y = [1, 2, 3]

W = tf.Variable(5.)

hypothesis = X * W
gradient = tf.reduce_mean((W * X - Y) * X) * 2
cost = tf.reduce_mean(tf.square(hypothesis - Y))
optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.01)
train = optimizer.minimize(cost)

sess=tf.Seession()
sess.run(tf.global_variables_initializer())

for step in range(100):
    print(step, sess.run(W))
    sess.run(train)

2.optimizer.compute_Gradients(cost)라는 함수 (gradient 값을 원하는것으로 바꾸고싶을때)

=>이 함수를 쓰게 될 경우 GradientDescentOptimizer 에서 계산한 gradient(미분값)값을 return 하게 되는데 이 return 값을 변수 gvs에 저장해서 우리가 원하는 대로 수정이 가능하다. (++수정을 하는 과정은 정확히 모르겠음,,) 그리고 수정한 gvs를 apply_gradients = optimizer.apply_gradients(gvs) 과정을 통해서 gvs에 apply 해주면 된다.

<코드2>

import tensorflow as tf

X = [1, 2, 3]
Y = [1, 2, 3]

W = tf.Variable(5.)

hypothesis = X * W
gradient = tf.reduce_mean((W * X - Y) * X) * 2
cost = tf.reduce_mean(tf.square(hypothesis - Y))
optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.01)

gvs=optimizer.compute_gradients(cost)
apply_gradients=optimizer.apply_gradients(gvs)

sess=tf.Seesion()
sess.run(tf.global_variables_initializer())

for step in range(100):
    print(step, sess.run([gradient,W,gvs]))
    sess.run(apply_gradients)
sukzoon1234 commented 5 years ago

영상에서 gradient 값을 gvs에 저장하고 원하는 대로 수정한다고 했는데 검색을 해 봐도 그 수정하는 정확한 과정이 잘 안나오더라고요,,,ㅜ

unizard commented 5 years ago

모놀 여러분중에서 해결해 주실분 안계시나요?

socome commented 5 years ago

https://m.blog.naver.com/PostView.nhn?blogId=atelierjpro&logNo=220978930368&proxyReferer=https%3A%2F%2Fwww.google.com%2F 해당 블로그에서 관련 내용을 설명하고 있어, 공유해드립니다.