同时最小化两个成本函数两个不同的参数

时间:2018-09-17 15:22:25

标签: python tensorflow

我有一个带有两个标量成本函数的模型 C_1 p t )和 C_2 (< em> p , t )。我的目标是同时将 p C_1 t C_2 最小化。换句话说,选择 p t 使得

d C_1 p t )/ d p = 0

d C_2 p t )/ d t = 0

注意我想要d C_1 p t )/ d t 为0,反之亦然。换句话说,此问题不等于最小化 C_1 C_2 的某些线性组合。

当前,我通过在传递 p 作为参数列表的同时最小化 C_1 然后在传递时最小化 C_2 t 。但是,这效率低下,并导致基于动量的优化器出现问题。有没有一种方法可以同时优化张量流中的两种成本,而无需将 C_1 的梯度应用于 t ,反之亦然?

编辑:

一个简单的示例如下:

import tensorflow as tf
import numpy as np

p = tf.Variable(np.random.random(size=(5, 5)))
t = tf.Variable(np.random.random(size=(5, 5)))

C_1 = tf.abs(p) / (1 + t**4)
C_2 = tf.abs(t) / (1 + p**4)

optimizer = tf.train.GradientDescentOptimizer(learning_rate=.05)
step1 = optimizer.minimize(C_1, var_list=[p])
step2 = optimizer.minimize(C_2, var_list=[t])
sess = tf.Session()
sess.run(tf.global_variables_initializer())

for i in range(20):
  for j in range(5):
     sess.run(step1)
  for j in range(5):
     sess.run(step2)

我正在寻找一种避免在C_1和C_2之间交替的方法,以便可以使用基于动量的优化器(并且还因为我怀疑它将导致更好的收敛性)。

0 个答案:

没有答案