# load the model
print("[INFO] loading network...")
model = load_model("fashion.model")
# load the image
image_path = "10026.jpg"
image = cv2.imread(image_path)
# pre-process the image for classification
image = cv2.resize(image, (96, 96))
image = image.astype("float") / 255.0
image = img_to_array(image)
image = np.expand_dims(image, axis=0)
print(image, type(image))
# extract the layer feature
get_3rd_layer_output = K.function([model.layers[0].input],[model.layers[3].output])
feature = get_3rd_layer_output(image)[0]
# prob = model.predict(image)[0]
报错:TypeError: inputs
to a TensorFlow backend function should be a list or tuple
原因在于,在使用get_3rd_layer时没有用[ ]将image框起来,变成一个list。
将该句
feature = get_3rd_layer_output(image)[0]
修改为:
feature = get_3rd_layer_output([image])[0]
K.function作用:
1.一种简单的方法是创建一个新的Model,使得它的输出是你想要的那个输出
from keras.models import Model
model = ... # create the original model
layer_name = 'my_layer'
intermediate_layer_model = Model(input=model.input,
output=model.get_layer(layer_name).output)
intermediate_output = intermediate_layer_model.predict(data)
2.此外,我们也可以建立一个Keras的函数来达到这一目的:
from keras import backend as K
# with a Sequential model
get_3rd_layer_output = K.function([model.layers[0].input], [model.layers[3].output])
layer_output = get_3rd_layer_output([X])[0]