2016-12-02 4 views
0

Je tente de charger des images dans un graphique TensorFlow qui sont RGB, mais je voudrais que le graphique les transforme en niveaux de gris avant le traitement.Erreur lors du chargement des images dans le graphique TensorFlow

x = tf.placeholder(tf.float32, shape=[None, 32, 32, 1], name='x') 

gray = tf.image.rgb_to_grayscale(x, name='grayscale') 

Cependant, je reçois l'erreur

ValueError: Cannot feed value of shape (250, 32, 32, 3) for Tensor 'x:0', which has shape '(?, 32, 32, 1)' 

J'exporté le notebook avec l'erreur et transféré sur Github en tant que fichier md pour et la brièveté complétude.

Je réalise que l'erreur est due au fait que le x_batch est en forme RVB.

Cependant, je pensais que TensorFlow effectuerait automatiquement la conversion.

Depuis tf.image.rgb_to_grayscale encapsule les entrées, ne devrait pas TF faire le grayscaling dans le cadre de la session? Ou ai-je mal compris comment cela fonctionne?

+1

Si vous voulez alimenter en images RVB, vous devez avoir un espace réservé avec la forme '[Aucun, 32, 32, 3] ». Alors le grayscaling peut arriver. –

+0

@OlivierMoindrot donc tf.image.rgb_to_grayscale fera le grayscaling sans autre code? Comment puis-je m'assurer que les images grises sont traitées? –

+0

Donc, si vous chargez des images RVB dans votre espace réservé, puis appliquez 'gray = tf.image.rgb_to_grayscale (x)', la sortie sera de forme '[None, 32, 32, 1]' et contiendra les images grises . Vous pouvez vérifier la forme de 'gray' si vous voulez être sûr. –

Répondre

1

La fonction tf.image.rgb_to_graycale attend un tenseur d'entrée avec sa dernière dimension ayant une taille 3. Par exemple, un lot d'images de forme (250, 32, 32, 3) dans votre cas, ou il pourrait être une seule image de forme (32, 32, 3).

Si vous voulez nourrir les images RVB et immédiatement les traiter en niveaux de gris, vous pouvez faire:

images = tf.placeholder(tf.float32, shape=[None, 32, 32, 3]) 
gray_images = tf.image.rgb_to_grayscale(images) # has shape (None, 32, 32, 1)