J'essaie de charger un ensemble de données d'image en niveaux de gris (mode-mnist) dans le modèle MobileNet pour prédire les nombres écrits à la main, mais selon ce tutoriel ne peut être chargé que les images RVB. Lorsque j'essaie de nourrir des échantillons de mode-mnist, cela me donne l'erreur suivante
Erreur lors de la vérification de l'entrée: keras_layer_13_input devrait avoir une forme (224, 224, 3) mais a obtenu un tableau avec la forme (224, 224, 1)
Comment résoudre ce problème?
3 Réponses :
MobileNet pré-formé ne convient probablement pas pour cette tâche. Vous avez deux problèmes différents. Mobilenet est conçu pour les images Imagenet qui sont des images 224x224 avec 3 canaux de couleur, tandis que l'ensemble de données MNIST est des images 28x28 avec un canal de couleur. Vous pouvez répéter le canal de couleur en RVB:
from PIL import Image data = np.array([Image.fromarray(x).resize([224,224]) for x in data])
Mais avant cela, vous devez redimensionner les images. Par exemple, vous pouvez utiliser PIL
pour redimensionner les images:
# data.shape [70000, 224, 224, 1] -> [70000, 224, 224, 3] data = np.repeat(data, 3, -1)
Il y a quelques petits détails ici que vous devriez comprendre vous-même. Tels que dtype
des images si vous avez chargé à partir de l'ensemble de données en tant que numpy. Vous devrez peut-être convertir les types numpy en entiers avec np.uint8()
.
L'équivalent de TensorFlow serait: tf.tile (data, [1, 1, 1, 3])
.
Je charge l'ensemble de données à partir de ce code splits, info = tfds.load ('mnist', with_info = True, as_supervised = True, split = splits)
afin que comment appliquer la solution ci-dessus pour cela
Comment redimensionner les images? Ils ne sont pas 224x224 dans mnist!
hub.KerasLayer (CLASSIFIER_URL, input_shape = (224, 224, 3))
voici comment je redimensionne les images
mais cela ne redimensionnera pas les images MNIST. ils ont 28 x 28 pixels.
Alors, quelle est la meilleure façon de faire cela? Ne pouvons-nous pas utiliser le modèle MobileNet pour prédire les images en niveaux de gris?
J'ai essayé d'ajouter plus d'explications. Dans ma solution, j'ai utilisé numpy. Peut-être qu'il existe également d'autres solutions dans le tensorflow. c'est-à-dire tensorflow.org/api_docs/python/tf/image/resize_images
essayez ceci, x = np.stack ((x,) * 3, axis = -1)
. Veuillez consulter ce lien pour plus de détails: https://github.com /malnakli/ML/blob/master/tf_serving_keras_mobilenetv2/main.ipynb
Mobilenet v2 a besoin de RVB. Vous pourrez peut-être également utiliser la fonction de conversion de PIL.
Essayez ceci:
from PIL import Image x= Image.open(input_image).resize((96,96)).convert("RGB")
la documentation est ici: https://pillow.readthedocs.io/en/stable/reference/Image.html
p >
Bienvenue dans stackoverflow. Veuillez nous montrer un exemple minimal, complet et vérifiable et vous obtiendrez de l'aide