В настоящее время я пытаюсь обучить SVM с использованием библиотеки sklearn.Я извлекаю элементы из предварительно подготовленного предпоследнего слоя в 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, где я тренирую alexnet с теми же 200 тренировочными изображениями, которые затем использую для извлечения функций для SVM.Вызовет ли это проблему для моего SVM, поскольку я обучаю свой SVM тем же функциям, что и у alexnet?