如何在多输入模型中获取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中,如果你有一个模型:.
- 打印你的模型,你可以知道图层名称;
- 包装一个新模型;
获取输出;
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>)
当 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中,如果你有一个模型:.
- 打印你的模型,你可以知道图层名称;
- 包装一个新模型;
获取输出;
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>)