我有一个神经网络,目前正作为张量编写,因为我还不了解层次。
我想在网络上施加条件,即根据所有其他参数写出(许多)参数中的一个 - 如何做到这一点?
答案 0 :(得分:0)
如果我理解正确,您希望对偏差单位实施约束。事实上,你想要对它们施加什么约束并不重要。实现这种功能的方法是运行优化器,它会更新所有可训练的变量(网络中的权重和偏差)。现在,您的偏见将违反您要应用的约束。优化器运行后,您希望规范化偏差以实现所需的约束。为此,您需要使用tf.control_dependencies
来确保约束依赖于优化程序的运行。它应该看起来像这样:
train_op = tf.train.AdamOptimizer(...).minimize(cost)
with tf.control_dependencies(train_op)
# some code that computes a normalized bias based on your constraints
new_train_op = tf.assign(bias, normalized_bias)
当您运行代码时,您可以要求new_train_op
而不是train_op
,它将通过普通优化器计算所有内容,并最终通过更新操作来改变偏差以强加所需的约束。 / p>
如果您不希望优化器执行更新并在事实之后进行规范化,则必须实现优化器本身。这实际上并不是那么难做,你可以完全使用你曾经使用过的exporflow构造和python,但值得另外一个问题。