将侧边条件合并到Keras神经网络中

2024-05-20 00:55:34 发布

您现在位置:Python中文网/ 问答频道 /正文

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

举个例子:

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

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

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


Tags: 函数网络true元素范数tensorflow神经网络条件
1条回答
网友
1楼 · 发布于 2024-05-20 00:55:34

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

必须转换不变量(norm<;=1) 一个惩罚函数,它被加到损失中。可能是这样的:

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

看看where的文档。如果你的预测有一个范数大于一,反向传播尝试最小化范数。如果它小于或等于,这部分损失就是0。没有梯度产生

但这很难优化。你的预测可能会在1的范数附近波动,也可以加上一个因子:total_loss = mse + 1000* norm_loss。要非常小心,这会使优化更加困难。 在上面的例子中,高于1的范数与损失成线性关系。这称为l1正则化。你也可以平方它,这将成为l2正则化

在你的特殊情况下,你可以发挥创造力。为什么不把你的预测和目标标准化为一个呢(只是一个建议,可能是个坏主意)

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

相关问题 更多 >