2017-08-13 106 views
0

我想学习张量优化,因为我主要是在Matlab中编写代码。用张量流的等式和不等式实现约束优化

我的MATLAB代码:

fun = @(x)100*(x(2)-x(1)^2)^2 + (1-x(1))^2; 
x0 = [0.5,0]; 
A = [1,2]; 
b = 1; 
Aeq = [2,1]; 
beq = 1; 
x = fmincon(fun,x0,A,b,Aeq,beq) 

我想用tensorflow实施上述优化。有没有办法复制它?

我遇到了this solution但它只说明了平等约束而不是不等式。

+0

您可以使用SciPy的最小化和TensorFlow-ScipyOptimizer桥 - https://www.tensorflow.org/api_docs/python/tf/contrib/opt/ScipyOptimizerInterface –

+0

SciPy的优化是臭名昭著的比较Matlab的不收敛..所以我希望tensorflow的人可以创建他们自己的算法,与Matlab相媲美 – Zanam

+2

TensorFlow的人不是魔术师,只是在本土的TF中进行scipy特性平价将会让人印象深刻。数值优化很难! –

回答

0

这里是一个如何来包装Tensorflow优化到更多的东西像你期望的优化一个教程:

https://pcess.github.io/tensorflow/

关键的一点要注意的是,Tensorflow不具有优化,其功能类似于Matlab的优化器如何工作。这是因为Tensorflow优化器基本上都是为了解决随机梯度下降问题而设计的......也就是说,在评估整个函数时如何优化函数的计算过于昂贵。因此,您不仅需要为Tensorflow设置自己的停止条件,还必须告诉它如何处理等式约束。

您肯定可以通过引入拉格朗日乘子来合并等式约束,但您必须手动执行该操作。

如果您只是想在Matlab之外进行优化,那么您应该尝试scipy.optimize.minimize中的一种方法。如果你绝对必须在Tensorflow中拥有它,那么你有很多工作要做。