-
# 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]
问题解决
一种简单的方法是创建一个新的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
此外,我们也可以建立一个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]
-
# 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]