2 votes

Prédiction d'une seule image PNG en utilisant un modèle TensorFlow entraîné

import tensorflow as tf
model = tf.keras.models.Sequential([
    tf.keras.layers.Flatten(input_shape = (28,28)),
    tf.keras.layers.Dense(128, activation = 'relu'),
    tf.keras.layers.Dropout(0.2),
    tf.keras.layers.Dense(10)
]) 

Ceci est le code du modèle, que j'ai entraîné en utilisant l'ensemble de données mnist. Ce que je veux faire ensuite, c'est passer une image png de 28x28 à la méthode predict(), ce qui ne fonctionne pas. Le code pour la prédiction est :

img = imageio.imread('image_0.png')
prediction = model.predict(img, batch_size = 1)

qui produit l'erreur

ValueError: Erreur lors de la vérification de l'entrée : on attendait flatten_input d'avoir une forme (28, 28) mais on a reçu un tableau avec une forme (28, 3)

Je suis bloqué sur ce problème depuis quelques jours, mais je ne trouve pas la bonne manière de passer une image à la méthode predict. Des conseils ?

1voto

Juan Rodriguez Points 81

La fonction Predict effectue des prédictions sur un lot d'images. Vous devez inclure la dimension du lot (première dimension) dans votre img, même pour prédire un seul exemple. Vous avez besoin de quelque chose comme ceci :

img = imageio.imread('image_0.png')
img = np.expand_dims(img, axis=0)
prediction = model.predict(img)

Comme le dit @desertnaut, il semble que vous utilisiez une image RVB, donc votre première couche devrait utiliser input_shape = (28,28,3). Par conséquent, le paramètre img de la fonction predict devrait avoir une forme (1,28,28,3).

Dans votre cas, le paramètre img de la fonction predict a une forme (28,28,3), donc la fonction predict a pris la première dimension comme le nombre d'images, et n'a pas pu faire correspondre les deux autres dimensions à l'input_shape de la première couche.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X