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



在大多数例子中,我看到我们希望在哪里看到中间层的输出值,似乎创建一个新模型是这样做的方法:

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(

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

你也必须训练这个新模型吗?

我什至无法想象任何图表可以代表这个新模型正在发生的事情......您添加另一个模型的输入层,然后添加另一个模型的随机中间层作为输出,并将输入馈送到它?

另外,这个新模型不会影响输出吗?它不会尝试学习或需要训练,或者层会从原始模型预先训练自己的权重,从而提供"改变"的输出值?

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

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

如果从另一个模型的输入层和输出层创建新模型,则实质上是获取具有相同便捷 API 的一部分。

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

最新更新