如何将传统分类器 (SVM) 添加到我的 CNN 模型

How to add a traditional classifier(SVM) to my CNN model

这是我的模型

model=Sequential()
model.add(Xception(weights='imagenet',input_shape=(224,224,3),include_top=False))
model.add(GlobalAveragePooling2D())
model.add(Dense(4096,activation='relu',name='fc1'))
model.add(Dense(4096,activation='relu',name='fc2'))
model.add(Dense(1000,activation='relu',name='fc3'))
model.add(Dropout(0.5))
model.add(Dense(1,activation='sigmoid',name='fc4'))
model.layers[0].trainable=False

我想让 svm classifier 作为我在这个模型中的最终 classifier 那么我该怎么做呢? 还有另一个问题我想知道某个输入的预测 class 所以当我使用

model.predict(x_test)

它只给了我概率,所以我该如何解决呢

您可以使用神经网络作为特征提取器,并将最后一层的输出输入到 SVM 中。尝试以下操作:

model=Sequential()
model.add(Xception(weights='imagenet',input_shape=(224,224,3),include_top=False))
model.add(GlobalAveragePooling2D())
model.add(Dense(4096,activation='relu',name='fc1'))
model.add(Dense(4096,activation='relu',name='fc2'))
model.add(Dense(1000,activation='relu',name='fc3'))
model.add(Dropout(0.5))
model.add(Dense(1,activation='sigmoid',name='fc4'))

model.compile(loss="categorical_crossentropy", optimizer="adam")
model.summary()

model.fit(X,y, epochs=10)

model.pop() # this will remove the last layer
model.summary() # check the network 

feature_mapping = model(X) 

from sklearn import svm

clf = svm.SVC()
clf.fit(feature_mapings, y)