【问题标题】:Implementing constrained optimization with both equalities and inequalities in tensorflow在张量流中实现具有等式和不等式的约束优化
【发布时间】:2018-01-23 04:49:39
【问题描述】:

我正在尝试学习 tensorflow 优化,因为我主要在 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,但它只考虑了等式约束而不是不等式。

【问题讨论】:

  • 您可以使用 scipy 最小化和 TensorFlow-ScipyOptimizer 桥 -- tensorflow.org/api_docs/python/tf/contrib/opt/…
  • scipy 优化器因与 Matlab 相比不收敛而臭名昭著。所以我希望 tensorflow 的人能够创建自己的算法,与 Matlab 相媲美
  • TensorFlow 人不是魔术师,今年只要在原生 TF 中实现 scipy 功能奇偶校验就会令人印象深刻。数值优化很难!

标签: matlab python-3.x tensorflow mathematical-optimization


【解决方案1】:

这是一个关于如何将 Tensorflow 优化器包装成更像您期望的优化器的教程:

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

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

您当然可以通过引入拉格朗日乘数来合并等式约束,但您必须手动执行此操作。

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

【讨论】:

    猜你喜欢
    • 2015-08-10
    • 2015-10-08
    • 2018-03-15
    • 1970-01-01
    • 2019-05-23
    • 2018-07-24
    • 1970-01-01
    • 1970-01-01
    • 2016-09-18
    相关资源
    最近更新 更多