2017-10-17 1 views
1

J'utilise un réseau convolutif pour classifier des images de différentes formes. Je n'arrive pas à trouver un moyen de charger des images dans Tensorflow. Basé sur this issue il devrait fonctionner avec tf.data.Dataset(). Je crée Dataset de cette manière:Dataset Tensorflow avec différentes formes

dataset = tf.data.Dataset.from_tensor_slices(filenames) 
    dataset = dataset.map(read_file) 
    dataset = dataset.shuffle(samples_in_buffer) 
    dataset = dataset.batch(batch_size) 
    dataset = dataset.repeat() 

Quand Exécuté je reçois cette erreur

HandleElementToSlice Cannot copy slice: number of elements does not match. Shapes are: [element]: [295,256,3], [parent slice]: [276,128,3] 

Est-il possible de charger des images avec différentes tailles, lecture aléatoire et par lots les utiliser tensorflow?

Remarque: Je veux utiliser la mise en commun de pyramide spatiale pour gérer les différentes tailles d'image.

Répondre

1

dataset.batch() tente de construire un lot dense de tenseurs de différentes tailles (vos différentes images de taille), comme indiqué ici: tf.contrib.data.DataSet batch size can only set to 1

Votre code est susceptible de travailler si l'1. vous définissez batch_size = 1 ou 2. redimensionner toutes les images à la même taille, par exemple en utilisant tf.image.resize_image_with_crop_or_pad() dans votre fonction read_file. Une autre option consisterait à utiliser dataset.padded_batch (...) au lieu de dataset.batch et à spécifier la forme padded_ de sorte que toutes les images aient la même taille (padding inclus), c'est-à-dire probablement dataset.padded_batch (batch_size, padded_shape = [Aucun]).

Enfin, dans le prochain TF R1.4 vous pouvez utiliser dataset.from_generator().