我正在查看advanced Keras tutorial on the tensorflow website,对于Bahdanau attention的实现我有点困惑:
class BahdanauAttention(tf.keras.Model):
...
因此,他们似乎将其实现为
Model
。然而,它本身并不是一个完整、有用的模型——它只是正在优化的大型Model
(本例中是解码器)的一部分。以后用作attention_layer = BahdanauAttention(10)
它强调了一个事实,即它可以被看作是一层
Model
。实际上,一旦人们意识到一个模型可以被重用为另一个模型的一部分,a
Model
和aLayer
之间的边界就会变得有点模糊。所以我的问题是,
路缘石中a
Layer
和aModel
之间的区别是什么何时将层实现为
Layer
比较合适,而不是总是将新层实现为Model
。 最佳答案
我觉得你有点困惑。从功能上讲,一个层和一个模型是完全不同的,我不明白为什么你需要比较它们。换句话说,模型通常是层的集合。将它们添加到模型中并将它们连接起来是您的责任。它们可以以各种复杂的方式连接起来。当然,您可以创建只有一个层的模型,但这取决于您使用它的目的。
至于你的第二个问题,关于什么时候做什么真的没有一个指导方针。通常你会用尽所有的选择,直到找到最有效的方法。在模型之间链接模型和共享层可能是决定是只需要一个简单的层,还是将它插入到模型中的一个决定性因素。