为什么我们需要创建一个新模型来查看中间层的输出?

Why do we need to create a new model to see intermediate layers' outputs?

在大多数示例中,我看到我们希望在何处查看中间层的输出值,似乎创建一个新模型是可行的方法:

from keras.models import Model

model = ...  # include here your original model

layer_name = 'my_layer'
intermediate_layer_model = Model(inputs=model.input,
                                 outputs=model.get_layer(layer_name).output)
intermediate_output = intermediate_layer_model.predict(data)

(来源:https://keras.io/getting-started/faq/#how-can-i-obtain-the-output-of-an-intermediate-layer

然而,我不明白的是:这个模型到底是做什么的?我们为什么需要它?我们不能直接将输入提供给具有这些层的原始模型,并直接汇集其层值吗?

你也要训练这个新模型吗?

我什至无法想象任何图表可以表示这个新模型正在发生的事情......你添加另一个模型的输入层,然后添加另一个模型的随机中间层作为输出,并提供输入到了吗?

还有,这个新模型不会影响产量吗?它会不会尝试学习或要求训练,或者该层会带来自己的权重,这些权重是从原始模型中预训练的,从而提供 "altered" 个输出值?

在您链接的常见问题解答文章中,这不是方式,这是一种简单的方式。

一个Model,毕竟只是一个带有方便的API层的图(.train().predict(),IO,...)。

如果你从另一个模型的输入和输出层创建一个新模型,你实际上是在获取它的一部分,它具有同样方便的 API。

此切片模型中的层与完整模型中的层相同,因此如果模型是从一开始就训练的,那么此子模型也会如此。 (很有可能,这些层只是对原始模型中层的引用,因此训练子模型也会训练(可能会导致不好的结果)主要模型。)