【问题标题】:Why do we need to create a new model to see intermediate layers' outputs?为什么我们需要创建一个新模型来查看中间层的输出?
【发布时间】:2019-09-09 12:11:25
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

  • .predict() 不会修改正在使用的模型/层。

标签: python keras deep-learning keras-layer


【解决方案1】:

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

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

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

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

【讨论】:

  • 但是这个新模型会将这些层连接在一起吗?例如。如果我抓住输入层和(比方说)第四个中间层,并将它们放入这个新模型中。现在这两个层会被链接在一起(输入->第四内层)还是保持它们的结构,我们实际上只是使用这个新模型来硬引用这两个层而不建立任何新的连接?
  • 我认为它就是这样发生的,是的。
猜你喜欢
  • 2020-12-28
  • 2015-03-28
  • 1970-01-01
  • 2020-12-27
  • 1970-01-01
  • 1970-01-01
  • 2018-08-03
  • 2013-08-30
  • 1970-01-01
相关资源
最近更新 更多