경사하강법 구현 과정

# 학습률 정의
learning_rate = 0.01

# 본격적인 경사하강법
for i in range(1000):
    with tf.GradientTape() as tape:
        hypothesis = W * x_data + b
        cost = tf.reduce_mean(tf.square(hypothesis - y_data))

    W_grad, b_grad = tape.gradient(cost, [W, b])

    W.assign_sub(learning_rate * W_grad)    # 모델 파라미터 업데이트
    b.assign_sub(learning_rate * b_grad)    # 모델 파라미터 업데이트

    if i % 10 == 0:
        print('{:5} | {:10.4} | {:10.4} | {:10.6f}'.format(i, W.numpy(), b.numpy(), cost))

tape에 기록을 하는 개념이라고 생각하면 된다.

assign_sub는 파이썬에서의 a -= b 연산과 동일하다.

마지막에는 중간 계산 과정을 보여주기 위해 10번마다 파라미터를 출력하도록 했다.

코드 보러가기

댓글남기기