我目前正在尝试使用库sklearn训练SVM。我要从alexnet(fc7)中总大小为(200, 4096)
的倒数第二层提取特征。下面的代码用于获取功能部件和标签并创建列表。
for j, image in enumerate(images):
print(j,"/",len(images))
img = cv2.resize(image.astype(np.float32), (227,227))
img = img - imagenet_mean
img = img.reshape((1, 227, 227, 3))
img = np.array(img).astype(np.float32)
layer7Vector = sess.run(prescore, feed_dict={x: img, keep_prob: 1})
imagefeatures.append(layer7Vector) # append all the features
for a, label in enumerate(labels):
labelfeatures.append(labels)
然后我将要素展平并使标签成为数组。
flatimagefeatures = np.squeeze(imagefeatures) # Flatten
flatlabelfeatures = np.array(labelfeatures, dtype = int)
flatlabelfeatures = ((flatlabelfeatures[0:1]).T).ravel()
flatlabelfeatures = flatlabelfeatures.ravel()
然后将其提供给SVM。这几乎是瞬时的。
modelSVM = sklearn.svm.SVC(kernel="linear", C=10000, gamma=0.0001, probability=True, verbose=True)
modelSVM.fit(flatimagefeatures, flatlabelfeatures)
然后我对训练文件中相同类别的一个看不见的数据集进行预测。
predicted_class_test = modelSVM.predict([f2test])
问题是SVM可以准确地预测测试中的所有图像,并且准确度为100%。
我的问题是:
我使用的是经过预先训练的alexnet,在其中使用200张相同的训练图像训练alexnet,然后使用这些图像提取SVM的功能。自从我使用具有Alexnet训练功能的功能训练我的SVM以来,这会对我的SVM造成问题吗?