gpt4 book ai didi

python - TF Keras v 1.14+ : subclass model or subclass layer for "module"

转载 作者:行者123 更新时间:2023-12-01 07:22:34 25 4
gpt4 key购买 nike

Tensorflow 有一些 docs用于子类化 (tf) Keras ModelLayer

但是,尚不清楚使用哪个“模块”或“ block ”(例如,几个层的集合)。

由于从技术上讲它是几个层,所以我觉得子类化Layer会具有欺骗性,虽然子类化Model有效,但我不确定是否可以这样做会受到任何负面处罚。

例如

x = inputs
a = self.dense_1(x) # <--- self.dense_1 = tf.keras.Dense(...)
b = self.dense_2(a)
c = self.add([x, b])

哪个适合使用?

最佳答案

(请注意,这个答案是旧的,后来,Keras 更改为允许并定期使用子类化)

最初,不需要用 Keras 子类化任何东西。除非您有特殊原因(不是构建、训练、预测),否则您不会为 Keras 进行子类化。

构建 Keras 模型:

要么使用Sequential(模型已经准备好,只需添加层),要么使用Model(创建带有层的图形,最后调用Model(inputs ,输出)),您不需要子类化。

当您创建 SequentialModel 实例时,您就拥有了一个完全定义的模型,可以在所有情况下使用。

该模型甚至可以用作其他模型的一部分,可以轻松访问其层以获取中间输出并在图中创建新分支。

所以,我根本看不出有任何理由对 Model 进行子类化,除非您正在使用一些需要这样做的附加框架(但我不这么认为)。这似乎是 PyTorch 用户的事情(因为这种模型构建对于 PyTorch 来说是典型的,为 Module 创建一个子类并添加层和调用方法)。但 Pytorch 无法像 Keras 那样轻松地获取中间结果。

使用 Keras 的主要优点正是这样:您可以轻松地从 block 和模型访问层,并立即从该点开始分支,而无需重建任何调用方法或在模型中添加任何额外的代码。因此,当您对 Model 进行子类化时,您只是违背了 Keras 的目的,从而使一切变得更加困难。

您提到的文档说:

Model subclassing is particularly useful when eager execution is enabled since the forward pass can be written imperatively.

我不太明白“强制”是什么意思,而且我不明白它比仅仅构建具有常规层的模型更容易。

文档中的另一段引用:

Key Point: Use the right API for the job. While model subclassing offers flexibility, it comes at a cost of greater complexity and more opportunities for user errors. If possible, prefer the functional API.

嗯......这总是有可能的。

子类化层

在这里,这样做可能有充分的理由。这些原因是:

  • 您需要一个能够执行常规图层无法执行的自定义计算的图层
  • 该层必须具有持久权重。

如果您不需要上述“两者”,则无需对图层进行子类化。如果您只想要没有权重的“自定义计算”,Lambda 层就足够了。

关于python - TF Keras v 1.14+ : subclass model or subclass layer for "module",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57627059/

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