Les prédictions CNN fonctionnent à partir de l'ensemble de test mais pas de leurs propres images
J'essaie de faire un classificateur de genre CNN et cela fonctionne bien avec les images de l'ensemble de test, mais lorsque j'entre iamges de google, il est toujours classé comme homme. J'ai essayé d'obtenir la réponse d' ici mais cela ne l'a pas résolue.
data = pd.read_csv('/content/age_gender.csv')
## Converting pixels into numpy array
data['pixels']=data['pixels'].apply(lambda x: np.array(x.split(), dtype="float32"))
classification = ['Male', 'Female']
X = np.array(data['pixels'].tolist())
## Converting pixels from 1D to 3D
X = X.reshape(X.shape[0],48,48,1)
X = X / 255.0
y = data['gender'].values
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.22, random_state=37)
model = Sequential..... # create the CNN and compile it
history = model.fit..... # fit the model and evaluate it gives me val_accuracy: 0.8902
Perte de test: 0,24722696840763092 Précision du test: 0,8912960290908813
Lorsque je prédis une image de l'ensemble de test en utilisant le code suivant, cela fonctionne très bien.
index = 5009
image = X_test[index]
pred = model.predict(image.reshape(1, 48, 48, 1), batch_size=1)
print(classification[pred.argmax()])
Mais quand j'essaie de prédire les images de Google, cela revient toujours en tant qu'homme.
file = "/content/female-2.jpeg"
image = cv.imread(file, cv.IMREAD_GRAYSCALE)
image = cv.resize(image, (48, 48))
image = image.reshape(1, 48, 48, 1)
image = image.astype('float32')
image = 255-image
image /= 255
pred = model.predict(image.reshape(1, 48, 48, 1), batch_size=1)
print(classification[pred.argmax()])
J'ai essayé tout un tas d'images différentes qui sont des femmes et cela revient TOUJOURS en tant que mâle. Qu'est-ce que j'oublie ici?
Réponses
Vous prétraitez les images de Google différemment par rapport à lorsque vous entraînez le modèle. La normalisation des valeurs de pixel est ce qui cause le problème.
image = 255-image
image /= 255
Cela devrait plutôt être:
image /= 255.0