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

时间:2019-09-09 12:11:25

标签: python keras deep-learning keras-layer

在大多数示例中,我看到了我们想要查看中间层的输出值的地方,看来创建新模型是一种方法:

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

但是,我不了解的是:这个模型到底做了什么?我们为什么需要它?我们不能只将输入提供给具有这些图层的原始模型,然后直接合并其图层值吗?

您还必须训练这种新模型吗?

我什至无法想象有任何图可以代表这个新模型发生了什么...您添加了另一个模型的输入层,然后添加了另一个模型的随机中间层作为输出,并向其提供输入?

此外,这个新模型不会影响输出吗?它是否会尝试学习或需要培训,还是该层从原始模型中预先训练了自己的权重,从而提供了“更改的”输出值?

1 个答案:

答案 0 :(得分:1)

在您链接的FAQ文章中,这不是 方式,而是一种简单的方法。

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

如果从另一个模型的输入和输出层创建一个新模型,则实际上是在抓取具有相同便捷API的切片。

此切片模型中的图层与完整模型上的图层相同,因此,如果训练该模型开始,则此子模型也将如此。 (很可能,这些层只是对原始模型中各层的引用,因此训练子模型也将训练(可能会导致不良结果)主模型。)