gpt4 book ai didi

tensorflow - 是否可以在 tensorflow 神经网络输出节点之间实现数学约束?

转载 作者:行者123 更新时间:2023-12-05 03:30:21 25 4
gpt4 key购买 nike

基本上是这样的:

是否可以在最后一层的 tensorflow 神经网络输出节点之间实现数学约束?

例如,节点之间的单调性,例如输出节点 1 大于节点 2,而节点 2 又大于节点 3,等等。

最佳答案

总的来说——至少不是真的,不是直接的。 Keras 层支持对权重 进行约束的参数,您也许能够将所需的输出约束转化为权重约束——但除此之外,您将需要考虑如何设置结构满足约束条件。

这是单调性约束如何可能的草图。实际上,将其包含在模型中可能需要创建自定义 Layer 子类或可能使用函数式 API。

首先,让我们创建一些虚拟数据。这可能是标准 Dense 层的输出(4 是批量大小,5 是输出数量)。

raw_outputs = tf.random.normal([4, 5])
>>> <tf.Tensor: shape=(4, 5), dtype=float32, numpy=
array([[ 0.3989258 , -1.7693167 , 0.13419539, 1.1059834 , 0.3271042 ],
[ 0.6493515 , -1.4397207 , 0.05153034, -0.2730962 , -1.1569825 ],
[-1.3043666 , 0.20206456, -0.3841469 , 1.8338723 , 1.2728293 ],
[-0.3725195 , 1.1708363 , -0.01634515, -0.01382025, 1.2707714 ]],
dtype=float32)>

接下来,使用 softplus 使所有输出为正。将其视为输出激活函数。任何返回值 >= 0 的函数都可以。例如,您可以使用 tf.exp,但指数增长可能会导致数值问题。我不推荐 relu,因为硬 0 会阻止梯度流动——这在输出层通常是个坏主意。

positive_outputs = tf.nn.softplus(raw_outputs)
>>> <tf.Tensor: shape=(4, 5), dtype=float32, numpy=
array([[0.9123723 , 0.15738781, 0.7624942 , 1.3918277 , 0.8700147 ],
[1.0696293 , 0.21268418, 0.71924424, 0.56589293, 0.2734058 ],
[0.24007489, 0.7992745 , 0.5194075 , 1.9821143 , 1.5197192 ],
[0.5241344 , 1.4409455 , 0.685008 , 0.68626094, 1.5181118 ]],
dtype=float32)>

最后,使用cumsum 将值相加:

constrained = tf.cumsum(positive_outputs, reverse=True, axis=-1)

>>> <tf.Tensor: shape=(4, 5), dtype=float32, numpy=
array([[4.0940967, 3.1817245, 3.0243368, 2.2618425, 0.8700147],
[2.8408566, 1.7712271, 1.558543 , 0.8392987, 0.2734058],
[5.0605907, 4.8205156, 4.021241 , 3.5018334, 1.5197192],
[4.8544607, 4.3303266, 2.889381 , 2.204373 , 1.5181118]],
dtype=float32)>

正如我们所见,每个批处理元素的输出单调递减!这是因为我们的每个原始输出 (positive_outputs) 基本上只是对每个单元添加的数量进行编码,并且因为我们强制它们为正,所以数字只能得到更大(或在这种情况下更小,因为 cumsum 中的 reverse=True)。

关于tensorflow - 是否可以在 tensorflow 神经网络输出节点之间实现数学约束?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70826457/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com