【问题标题】:Incorporate side conditions into Keras neural network将边条件纳入 Keras 神经网络
【发布时间】:2018-09-27 13:32:49
【问题描述】:

我想用输出元素的附加条件来训练我的神经网络(在 Keras 中)。

一个例子:

  • 最小化网络输出y_predy_true之间的损失函数MSE。
  • 另外,确保y_pred 的范数小于或等于1。

没有条件,任务就很简单了。 注意:条件不一定是y_pred的向量范数。

如何在 Keras(或 Tensorflow)模型中实现附加条件/限制?

【问题讨论】:

    标签: python tensorflow keras


    【解决方案1】:

    原则上,tensorflow(和 keras)不允许您向模型添加硬约束。

    您必须将您的不变量(范数

    y_norm = tf.norm(y_pred)
    norm_loss = tf.where(y_norm > 1, y_norm, 0)
    total_loss = mse + norm_loss
    

    查看where 的文档。如果您的预测具有大于 1 的范数,则反向传播会尝试最小化该范数。如果小于等于,这部分的loss就是0,不产生梯度。

    但这可能很难优化。您的预测可能会在范数 1 附近波动。也可以添加一个因子:total_loss = mse + 1000* norm_loss。对此要非常小心,这会使优化变得更加困难。 在上面的示例中,上述范数对损失的贡献是线性的。这称为 l1 正则化。你也可以平方它,这将变成 l2-regularization。

    在您的具体情况下,您可以发挥创意。为什么不将您的预测和目标标准化为一个(只是一个建议,可能是个坏主意)?

    loss = mse(y_pred / tf.norm(y_pred), y_target / np.linalg.norm(y_target)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-01-21
      • 1970-01-01
      • 1970-01-01
      • 2017-03-17
      • 2020-02-25
      • 2018-10-10
      • 2021-09-22
      • 1970-01-01
      相关资源
      最近更新 更多