머신러닝

머신러닝 TensorFlow 응용 2차 방정식의 중근 구하기

coding art 2018. 11. 25. 15:30
728x90

파이선 코딩을 배우는 초보자도 머신 러닝에 한번 도전해 보자.

머신 러닝을 배우려는 초보자들이 가지게 될 의문점들을 하나하나 찾아내어

실제 풀어보고 결과를 확인해볼 수 있도록  완전히 뒷문으로 들어가 시작하는 머신 러닝!


우선 아래 url 을 방문하여 url 로 구성된 본 서의 목차 파일을 무료로 다운로드 받아 살펴보시기 바랍니다.

파이선 코딩 초보자를 위한 톈서플로우∙OpenCV 머신러닝 머리말과 url 목차 파일 다운로드
https://steemit.com/kr/@codingart/pryx1-opencv

noname03.png

_____________________________________________________________________________________________________

2차 방정식이 중근을 가지는 경우도 2개의 근을 구하는 방법으로 접근하여 근사적으로 중근을 구할 수 있으나 지나치게 많은 학습 횟수가 요구된다. 하지만 2차 방정식의 계수를 알면 판별식에 의해 중근을 가지는지 여부를 알 수 있다. 따라서 중근을 가지는 경우는 다음과 같이  hypothesis = (x_train-W)*(x_train-W) 설정이 가능하다.

y=x*x 함수에 대해 2개의 학습 데이터를 사용하자.
x_train = [1.0, 2.0]
y_train = [1.0, 4.0]

.



즉 결과 식에 의하면 다음 좌표 값은 바로 앞 좌표 값의 (1/2)배씩 줄어든다는 것을 알 수 있다.  이 결과는 주어진 구간의 중앙 좌표를 다음 번 좌표로 사용하는  bisection search 의 결과와 유사한데 즉 수렴이 상당히 느린 편이다. 반면에 learning rate = 0.05로 둔 Tensorflow에 의한 계산 결과를 보면 수렴 속도가 Newton Raphson 기법과 비교할 수 없을 정도로 대단히 빠르다는 것을 알 수 있다.




#quadraticeqn_degen_regression_01.py
import tensorflow as tf

x_train = [1.0, 2.0]
y_train = [1.0, 4.0]

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

hypothesis = (x_train - W) * (x_train - W)

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

optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.05)
train = optimizer.minimize(cost)

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


for step in range(11):
    sess.run(train)
    if step % 1 == 0:
        print(step, sess.run(cost), sess.run(W))