首页 > 解决方案 > 有没有办法在张量流中施加约束,我可以在此过程中强制执行一些规则吗?

问题描述

是否有某种方法可以限制张量流生成的数据,例如,如果我的模型产生两个输出,您可以对这些输出施加某种约束吗,例如如果 a 和 b 输出可以预先执行类似(a +b)/2<10? 所以模型不会打破这个规则?

提前致谢

标签: python-3.xtensorflowconstraints

解决方案


如果“由 TensorFlow 生成”是指由神经网络生成,我认为一般情况下不可能做到这一点。您不能真正保证神经网络的输出通常不会违反此类硬约束,尤其是在测试时。

这是你可以做的:

  • 添加损失项,例如max(0, (a+b)/2 - 10). 这不能保证不违反您的约束(NN 的优化是“尽力而为”)。顺便说一句,这个损失函数与支持向量机中使用的铰链损失非常相似。
  • 使用适当的激活函数。例如,如果您知道您的数据必须介于 之间[0, 1],请在输出上使用 sigmoid 激活。
  • 如果输出超出允许范围,则将其“投影”回允许范围。

虽然最后两个选项保证了可行性,但并不总是可以做到这一点,或者不清楚如何做到这一点,甚至更糟糕的是,这将如何影响学习。例如,如果你看到了,(a+b)/2 >= 10你会怎么做?你会减少直到约束被满足,还是b两者兼而有之?有时可以通过一些度量来定义“最近的可行点”,但一般情况下不是这样。ab


推荐阅读