#python #machine-learning #keras
Вопрос:
С classifier.predict_classes()
тех пор как я обесценился, как я могу использовать приведенные ниже строки кодов, используя np.argmax()
.
import cv2
import numpy as np
from keras.models import load_model
classifier=load_model("cats_vs_dogs_V1.h5")
def draw_test(name, pred, input_im):
BLACK = [0,0,0]
if pred == "[0]":
pred = "cat"
if pred == "[1]":
pred = "dog"
expanded_image = cv2.copyMakeBorder(input_im, 0, 0, 0, imageL.shape[0] ,cv2.BORDER_CONSTANT,value=BLACK)
#expanded_image = cv2.cvtColor(expanded_image, cv2.COLOR_GRAY2BGR)
cv2.putText(expanded_image, str(pred), (252, 200) , cv2.FONT_HERSHEY_COMPLEX_SMALL,4, (23,0,255), 2)
cv2.imshow(name, expanded_image)
for i in range(0,10):
rand = np.random.randint(0,len(X_test))
input_im = X_test[rand]
imageL = cv2.resize(input_im, None, fx=2, fy=2, interpolation = cv2.INTER_CUBIC)
cv2.imshow("Test Image", imageL)
input_im = input_im.reshape(1,150,150,3)
## Get Prediction
res = str(classifier.predict_classes(input_im, 1, verbose = 0)[0])
draw_test("Prediction", res, imageL)
cv2.waitKey(0)
cv2.destroyAllWindows()
Я попытался заменить str(classifier.predict_classes(input_im, 1, verbose = 0)[0])
на str(np.argmax(classifier.predict(input_im, 1, verbose = 0)[0]))
, но не получил желаемого результата.
Ответ №1:
Я думаю, что проблема не в использовании np.argmax()
. Вы сделали это правильно с str(np.argmax(classifier.predict(input_im, 1, verbose = 0)[0]))
помощью . Однако он возвращает "0"
или "1"
вместо "[0]"
или "[1]"
. Таким образом, вам нужно исправить свою draw_test()
функцию.
def draw_test(name, pred, input_im):
BLACK = [0,0,0]
input_dict = {"0":"cat", "1":"dog"}
pred = input_dict[pred]
expanded_image = cv2.copyMakeBorder(input_im, 0, 0, 0, imageL.shape[0] ,cv2.BORDER_CONSTANT,value=BLACK)
#expanded_image = cv2.cvtColor(expanded_image, cv2.COLOR_GRAY2BGR)
cv2.putText(expanded_image, str(pred), (252, 200) , cv2.FONT_HERSHEY_COMPLEX_SMALL,4, (23,0,255), 2)
cv2.imshow(name, expanded_image)
Комментарии:
1. Модель теперь показывает имя. Но Это возвращает только кошку. Все собаки также были возвращены как кошки.
res = str(np.argmax(classifier.predict(input_im, 1, verbose = 0)))
. Я попробовал поставитьres = str(np.argmax(classifier.predict(input_im, 1, verbose = 0)[0]))
, но никаких изменений.2. Я думаю, что это проблема модели, а не ошибка кода . Попробуй
draw_test("Prediction", "1", <image array>)
. Он должен вернутьсяdog
. Возможно, вам потребуется переобучить свою модель с использованием большего количества образцов и менее предвзятых обучающих образцов.3. при ставке «1» теперь отображаются только собаки. Я переучился на модель. Я не думаю,что ошибка связана с моим кодом, потому
classifier.predict_classes(input_im, 1, verbose = 0)[0])
что показывает правильный непредвзятый вывод. [Ссылка на мой github ]( github.com/sumit-mandal/DeepLearning-opencvProj/blob/main/… )