optim.py-使用tensorflow实现一般优化算法
2021-05-03 22:29
标签:with lambda int name 使用 eps ons rust inverse Tensorflow supports symbol computation well like Automatic derivation and the program The Dogleg method to solve the subproblems of trust region method Get the gradient of function f with tf.gradients() Get the Hessian matrix of f with tf.hessian Trust region method with subproblems solved by the Dogleg method Exact line search method when the target function is quadratic quasi-Newton method f is the target function, c_eq is a list contains equation constraints, optim.py-使用tensorflow实现一般优化算法 标签:with lambda int name 使用 eps ons rust inverse 原文地址:https://www.cnblogs.com/TigerZhang/p/13196363.htmloptim.py
Project URL:https://github.com/Codsir/optim.git
Based on: tensorflow, numpy, copy, inspect
Why Tensorflow?
could be excuted with GPU, which will save our time.dogleg(p_u, p_b, delta, tau = 2)
getGrad(f, x_value)
f= lambda x:100*(x[1]-x[0]**2)**2 + (1-x[0])**2
x_value = [1.0,2.0]
f_gradients = getGrad(f, x_value)
getHess(f, x_value)
TrustRegion_dogleg(f, delta = 0.5, eta = 0, *x_0, tolerance= 0.0001)
ExactLineSearch_quadratic(f, x_k, p_k)
QuasiNewton(f, *x_0, HUpdateMethod = ‘BFGS‘, LineSearch = ExactLineSearch_quadratic, tolerance = 0.0001)
PenaltySimple(f, c_eq, c_leq, epsilon)
c_leq is a list contains unequal constrains, epsilon is the terminal parameter
these functions could be function name or anonymous functions, which defined by ‘lambda‘
The subproblem is solved by Newton Method, but it will be modified in the future because sometimes it‘s hard to compute the inverse matrix of Hessian matrix.Example
Demo 1:trust region method with subproblems solved by the Dogleg method
f = lambda x:100*(x[1]-x[0]**2)**2 + (1-x[0])**2
f.paraLength = 2 ## 这一步不可缺少
x_k, f_k = TrustRegion_dogleg(f, delta = 10)
Demo 2:quasi-Newton method demo
print(‘Demo 2:quasi-Newton method demo‘)
f = lambda x:x[0]**2 + 2 * x[1]**2
f.paraLength = 2
x_0 = np.array([1, 1])
x_k, f_k = QuasiNewton(f, x_0)
Demo 3:penalty function method demo
print(‘Demo 3:penalty function method demo‘)
f = lambda x:x[0] + x[1]
f.paraLength = 2
c_eq = [lambda x:x[0]**2 + x[1]**2 - 2]
c_leq = []
x_k, f_k = PenaltySimple(f, c_eq, c_leq, [-3,-4])
下一篇:java文件拷贝
文章标题:optim.py-使用tensorflow实现一般优化算法
文章链接:http://soscw.com/index.php/essay/81997.html