web-dev-qa-db-fra.com

Afficher une image MNIST à l'aide de matplotlib

J'utilise tensorflow pour importer des données d'entrée MNIST. J'ai suivi ce tutoriel ... https://www.tensorflow.org/get_started/mnist/beginners

Je les importe comme si ...

from tensorflow.examples.tutorials.mnist import input_data

mnist = input_data.read_data_sets("/tmp/data/", one_hot=True)

Je souhaite pouvoir afficher n’importe laquelle des images du kit d’entraînement. Je sais que l'emplacement des images est mnist.train.images, alors j'essaie d'accéder aux premières images et de les afficher comme suit ...

with tf.Session() as sess:
    #access first image
    first_image = mnist.train.images[0]

    first_image = np.array(first_image, dtype='uint8')
    pixels = first_image.reshape((28, 28))
    plt.imshow(pixels, cmap='gray')

Je tente de convertir l’image en un tableau numpy de 28 sur 28 car je sais que chaque image mesure 28 sur 28 pixels.

Cependant, lorsque je lance le code, tout ce que je reçois est le suivant ...

 enter image description here

Clairement, je fais quelque chose de mal. Lorsque j'imprime la matrice, tout semble bien paraître, mais je pense que je la reformule de manière incorrecte.

6
Bolboa

Vous convertissez un tableau de flottants ( comme décrit dans la documentation ) en uint8, ce qui les tronque à 0 s'ils ne sont pas 1.0. Vous devriez soit les entourer, soit les utiliser comme flotteurs, soit multiplier par 255.

Je ne suis pas sûr pourquoi vous ne voyez pas le fond blanc, mais je suggérerais de toute façon d'utiliser une échelle de gris bien définie.

3
allo

Le code suivant montre des exemples d'images affichées dans la base de données de chiffres MNIST utilisée pour la formation de réseaux de neurones. Il utilise une variété de codes autour de stackflow et évite les pil.

# Tested with Python 3.5.2 with tensorflow and matplotlib installed.
from matplotlib import pyplot as plt
import numpy as np
from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets('MNIST_data', one_hot = True)
def gen_image(arr):
    two_d = (np.reshape(arr, (28, 28)) * 255).astype(np.uint8)
    plt.imshow(two_d, interpolation='nearest')
    return plt

# Get a batch of two random images and show in a pop-up window.
batch_xs, batch_ys = mnist.test.next_batch(2)
gen_image(batch_xs[0]).show()
gen_image(batch_xs[1]).show()

La définition de mnist se trouve à: https://github.com/tensorflow/tensorflow/blob/master/tensorflow/contrib/learn/python/learn/datasets/mnist.py

Le réseau neuronal tensorflow qui m'a amené à afficher les images MNINST se trouve à l'adresse: https://github.com/tensorflow/tensorflow/blob/r1.2/tensorflow/examples/tutorials/mnist/mnist_deep.py

Comme je n’ai programmé Python que pendant deux heures, j’ai peut-être commis de nouvelles erreurs. S'il vous plaît n'hésitez pas à corriger.

10
wheresmypdp10

Voici le code complet pour afficher une image en utilisant matplotlib

first_image = mnist.test.images[0]
first_image = np.array(first_image, dtype='float')
pixels = first_image.reshape((28, 28))
plt.imshow(pixels, cmap='gray')
plt.show()
7
Vinh Trieu

Pour ceux d'entre vous qui veulent le faire avec PIL.Image: 

import numpy as np
import PIL.Image as pil
from tensorflow.examples.tutorials.mnist import input_data

mnist = input_data.read_data_sets('mnist')

testImage = (np.array(mnist.test.images[0], dtype='float')).reshape(28,28)

img = pil.fromarray(np.uint8(testImage * 255) , 'L')
img.show()
2
WhatAMesh