SymPy library를 사용하여 간단한 이차함수의 최소값을 gradient descent 방법으로 찾는 문제
- 처음에
line 18
에_ , fun = func(val)
을 설정하고 실행했더니,
TypeError가 떴다.Problem
문제에서fun = func
이란 기본 설정이 되어있었는데, fun이라는 변수는 곧 func() 함수다.
필자는line 18
에서 fun에 func()의 리턴값인 수식을 할당했으므로 fun을 함수가 아닌 수식이 되어버렸다.수식에 val을 집어넣으면 결과값 (float) 만 나오므로 index가 존재하지 않는다.
그래서 TypeError가 발생!Solution
1.line 18
을 그대로 남겨두고 (fun을 수식으로써 이용) print문을 fun(val)이 아닌 func(val) 이라 수정하면 된다.
2.line 18
을 지우고,line 11
을 살려 fun을 함수로써 계속 이용한다.
3. 따로 변수를 지정해 수식을 하나 세워두고 결과적으론 func 함수는 1번만 호출한다 (효율적으로..)
print(grad)
를 통해 미분값을 확인해보니, 마지막에 앞자리가 9로 변한 것을 확인할 수 있다.
코드 상으로 while문을 빠져나오기 직전, grad 값이 변하고 출력이 되고나서 while문을 빠져나오므로 epsilon 보다 작아진 grad (9.@@@@e-6)이 출력된다.처음에는... 앞자리만 보고 숫자가 커진 줄 알았다. 하지만 뒤에가 e-6승이라는 것 ㅎ