如何在多输入模型中获取keras层的输出?

How to get keras layer's output in a multiple-input model?

当 Keras 模型接受多个输入时,其层的行为就像只有一个输入一样。这可能是一个错误。

model = vgg19.VGG19(weights='imagenet', include_top=False, pooling='avg')
model(image1)
model(image2)

model.get_output_at(0)
model.get_output_at(1)
#no error here

outputs_0 = [layer.get_output_at(0) for layer in model.layers]
#no error here

outputs_1 = [layer.get_output_at(1) for layer in model.layers]
#error "Asked to get output at node 1, but the layer has only 1 inbound nodes."

我真的不知道什么是outputs_0,因为模型有两个输入,image1和image2,当一个层return输出时,它对应的输入是什么?

无论模型的输入和输出如何,都没有关于模型内部层的行为方式的规则。一个模型可能有 许多内部分支 并重用(或不重用)具有不同输入的同一层,从而产生不同的输出。如果该层被多次使用,该层将只有 "output at 1 (or more)"。

唯一确定的事情是:

  • 输入层将匹配模型的输入(见 1),
  • 并且输出层将匹配模型的输出(参见 1)。
  • 但两者之间一切皆有可能(见 2)。

(1) - 但是,具有很多 inputs/outputs 的模型实际上有很多 "input/output layers"。每个输出层都有一个输出。如果你检查 "model" 输出,你有很多,但如果你检查 "layers" 输出,那么有几个输出层,每个输出一个输出(仅输出为 0)。这同样适用于模型的输入与输入层。

(2) - 尽管如此,最常见的选择是只使用一次层,因此只有 "output at 0",没有额外的输出。

在keras中,如果你有一个模型:.

  1. 打印你的模型,你可以知道图层名称;
  2. 包装一个新模型;
  3. 获取输出;

    from keras.models import Model
    print(<your_model>.summary())
    
    <new_model> = Model(inputs=<your_model>.input, outputs=<your_model>.get_layer('your layer_name').get_output_at(<index_number>))
    
    <your_output> = <new_model>.predict(<your_input>)