在大多数示例中,我看到了我们想要查看中间层的输出值的地方,看来创建新模型是一种方法:
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)
但是,我不了解的是:这个模型到底做了什么?我们为什么需要它?我们不能只将输入提供给具有这些图层的原始模型,然后直接合并其图层值吗?
您还必须训练这种新模型吗?
我什至无法想象有任何图可以代表这个新模型发生了什么...您添加了另一个模型的输入层,然后添加了另一个模型的随机中间层作为输出,并向其提供输入?
此外,这个新模型不会影响输出吗?它是否会尝试学习或需要培训,还是该层从原始模型中预先训练了自己的权重,从而提供了“更改的”输出值?
答案 0 :(得分:1)
在您链接的FAQ文章中,这不是 方式,而是一种简单的方法。
毕竟,Model
只是具有方便的API(.train()
,.predict()
,IO,...)的层图。
如果从另一个模型的输入和输出层创建一个新模型,则实际上是在抓取具有相同便捷API的切片。
此切片模型中的图层与完整模型上的图层相同,因此,如果训练该模型开始,则此子模型也将如此。 (很可能,这些层只是对原始模型中各层的引用,因此训练子模型也将训练(可能会导致不良结果)主模型。)