我正在使用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
。