我所做的是:
from keras.applications.vgg16 import VGG16from keras.layers import *from keras.models import Modelimport numpy as np vgg_model = VGG16(weights='imagenet', include_top=False, input_shape = (224,224, 3)) block5_conv3 = vgg_model.get_layer("block5_conv3").outputinput_image = Input(shape=(224,224, 3), name='image_input')vgg_out = vgg_model(input_image)f0 = Flatten()(block5_conv3)test_model = Model(inputs=input_image, outputs=f0)print(test_model.summary())
但我得到了以下错误信息:
Traceback (most recent call last): File "test.py", line 15, in <module> test_model = Model(inputs=input_image, outputs=f0) File "C:\Users\wzhou\AppData\Local\Continuum\Anaconda2\envs\tensorflow\lib\site-packages\keras\legacy\interfaces.py", line 91, in wrapper return func(*args, **kwargs) File "C:\Users\wzhou\AppData\Local\Continuum\Anaconda2\envs\tensorflow\lib\site-packages\keras\engine\network.py", line 93, in __init__ self._init_graph_network(*args, **kwargs) File "C:\Users\wzhou\AppData\Local\Continuum\Anaconda2\envs\tensorflow\lib\site-packages\keras\engine\network.py", line 237, in _init_graph_network self.inputs, self.outputs) File "C:\Users\wzhou\AppData\Local\Continuum\Anaconda2\envs\tensorflow\lib\site-packages\keras\engine\network.py", line 1430, in _map_graph_network str(layers_with_complete_input))ValueError: Graph disconnected: cannot obtain value for tensor Tensor("input_1:0", shape=(?, 224, 224, 3), dtype=float32) at layer "input_1". The following previous layers were accessed without issue: []
我觉得我的做法有问题,但无法找出正确的方法。
回答:
在这种情况下,无需定义Input
层。你可以使用VGG模型的input
属性:
vgg_model = VGG16(weights='imagenet', include_top=False, input_shape = (224,224, 3)) block5_conv3 = vgg_model.get_layer("block5_conv3").outputf0 = Flatten()(block5_conv3)test_model = Model(inputs=vgg_model.input, outputs=f0)
或者,你可以定义并使用后端函数:
from keras import backend as K# ... (使用上述代码,除了最后一行)func = K.function([vgg_model.input], [f0])# 调用它:outputs = func([your_image_arrays])