Les prédictions CNN fonctionnent à partir de l'ensemble de test mais pas de leurs propres images

Jan 02 2021

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

2 yudhiesh Jan 02 2021 at 10:34

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