Tensorflow:在ScipyOptimizer

时间:2018-01-30 12:56:35

标签: tensorflow mathematical-optimization

我正在使用ScipyOptimizerInterface中的tensorflow。我在下面提供了一个最小的示例,其中我为某些f(x)=p*x**2+x placeholder优化了函数p

现在,我想在优化期间逐渐更改占位符的值,即我想在优化程序的每个步骤中更改p。因为我使用的是ScipyOptimizerInterface,所以我只得到优化的最终结果,而不是一步之后。

问题:如何逐步更改p?当然,我仍然希望优化能够高效运行。

动机

在我的实际用例中,我希望我的优化的最终结果能够满足一些非线性约束。为了确保这一点,我对违反这些约束的行为进行了处罚,并使用p加权惩罚。通过随着时间的推移增加p,我最初允许一些违规,但最后确保满足约束。

最小例子

import tensorflow as tf
from tensorflow.contrib.opt import ScipyOptimizerInterface 

# setup variables
x=tf.get_variable("x",initializer=[1.0])
p=tf.placeholder(dtype=tf.float32)
val=10.0

# setup optimization
f=p*x**2+x
optimizer = ScipyOptimizerInterface(f, options={'maxiter': 100})

# run
with tf.Session() as session:
    init = tf.global_variables_initializer()
    session.run(init, feed_dict={p:val})

    optimizer.minimize(session, feed_dict={p:val})

    ret=session.run(x)
    print(ret)

如果重要:我的张量流版本为1.4.1

0 个答案:

没有答案