【问题标题】:Solving Constrained Optimization in Tensorflow解决 Tensorflow 中的约束优化
【发布时间】:2020-11-06 15:23:17
【问题描述】:

我正在尝试解决 Tensorflow 中的约束优化问题。

我想将theta_r <= min(theta_tf)theta_s >= max(theta_tf)n > 1Ks > 0 的条件添加到我的损失函数中。您知道如何将此类约束添加到损失函数中吗?我正在使用 L-BFGS 优化器。

下面是我的损失函数的样子。

self.loss =  tf.reduce_mean(tf.square(self.theta_tf - self.theta_pred)) + \
                     tf.reduce_mean(tf.square(self.fbd_predict)) + \
                     tf.reduce_mean(tf.square(self.f_pred)) + \
                     self.weights_L2 + self.biases_L2 +\
                     1.0e-7 * (self.theta_r**2 + self.theta_s**2 + self.alpha**2 + self.n**2 + self.K_s**2)

【问题讨论】:

    标签: python tensorflow optimization


    【解决方案1】:

    您可以通过tf.math.minimumtf.math.maximum 表示边界。然后,您可以选择一个自定义损失函数(例如 MSE),并将它们应用于这些函数并将它们相加。

    min_theta_tf = tf.math.reduce_min(theta_tf)
    max_theta_tf = tf.math.reduce_max(theta_tf)
    
    loss_theta_r = tf.square(
        tf.math.maximum(theta_r, min_theta_tf)  # bound to 'min_theta_tf'
        - min_theta_tf
    )
    loss_theta_s = tf.square(
        tf.math.minimum(theta_s, max_theta_tf)  # bound to 'max_theta_tf'
        - max_theta_tf
    )
    loss_n = tf.square(tf.math.minimum(n, 1) - 1)
    loss_Ks = tf.square(tf.math.minimum(Ks, 0))
    
    loss = loss_theta_r + loss_theta_s + loss_n + loss_Ks
    

    【讨论】:

      猜你喜欢
      • 2020-01-17
      • 1970-01-01
      • 1970-01-01
      • 2019-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-06
      相关资源
      最近更新 更多