gpt4 book ai didi

python - 使用 `K.constant` 或 `self.add_weight(trainable=False)` 作为层中的固定权重有什么不同

转载 作者:行者123 更新时间:2023-12-02 06:52:56 27 4
gpt4 key购买 nike

我有一个使用固定权重矩阵的自定义 keras 层。我想知道如何使用 keras API 和 tensorflow 来处理这个固定权重矩阵。特别是,当 self.add_weights(trainable=False) 提供更大的灵 active 时,为什么我要使用 K.constant (例如,我可以使用 Layer.set_weights 与后一个)。

具体来说,在构建方法中我可以这样做:

 class CustomLayer(Layer):
...

def build(self, input_shape):
self.fixed_tensor = K.constant(self.my_fixed_tensor)
self.built = True

 class CustomLayer(Layer):
...

def build(self, input_shape):
self.fixed_tensor = self.add_weight(
shape=self.my_fixed_tensor.shape,
initializer=lambda shape, dtype: self.my_fixed_tensor,
trainable=False
)
self.built = True

两种解决方案都有效,我想知道它们在后端的处理方式是否不同。

最佳答案

K.constant Keras 类似于 tf.constant ,它只是创建一个常值张量。它是一个较低级别的构造,正如您所说,它仅对永远不会改变的值有用。大多数时候没有必要显式调用它,因为执行诸如 2 * my_tensor 之类的操作会将 2 转换为常量自动为您选择正确类型的张量。但是,在某些情况下,您可能更愿意显式调用它,例如,如果您有一个常量值数组,并且只需要一个张量来表示它们(而不是重复地将它们转换为新的常量张量)。

add_weight 是一种层方法,它创建一个表示层中某些可变值的 TensorFlow 变量。权重是一个更高层次的概念,与分层模型相关。正如您所指出的,权重,无论是否可训练,都可以动态更改。

理论上,您可以在模型中完全没有常数,并将它们全部替换为权重。然而,它通常不太实用,因为变量(至少在 1.x 中)需要初始化,它们的使用不能像常量一样优化,而且如果您从不更改它,它们的开销不会给您带来任何好处。

关于python - 使用 `K.constant` 或 `self.add_weight(trainable=False)` 作为层中的固定权重有什么不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58801041/

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