我正在研究一个图像识别问题。训练完模型后,我保存了架构和权重。现在我想用这个模型从其他图像中提取特征,并对其执行SVM。为此,我想删除模型的最后两层,得到CNN和完全连接层计算的值。我如何在Keras中做到这一点?
# a simple model
model = keras.models.Sequential([
keras.layers.Input((32,32,3)),
keras.layers.Conv2D(16, 3, activation='relu'),
keras.layers.Flatten(),
keras.layers.Dense(10, activation='softmax')
])
# after training
feature_only_model = keras.models.Model(model.inputs, model.layers[-2].output)
feature_only_model取a(32,32,3)作为输入,输出是特征向量
如果您的模型是子类化的-只需更改call()
方法。
如果没有:
- 如果你的模型是复杂的,用子类模型包装你的模型,并在
call()
方法中改变前向传递,或者 - 如果你的模型是简单的-创建没有最后一层的模型,分别加载权重到每一层