2016-11-27 3 views
0

J'ai essayé this tutorial on Youtube (explination de .cls et .labels à 1m31s) qui est juste un simple modèle de classificateur MNIST. Mais j'ai été incapable de le terminer en raison d'une fonction apparemment manquante dans Tensorflow.Comment obtenir des étiquettes entières à partir d'exemples MNIST après avoir spécifié one_hot = True?

>>>from tensorflow.examples.tutorials.mnist import input_data 
>>>data = input_data.read_data_sets("data/MNIST", one_hot=True) 

>>>one_hot_labels = data.test.labels #mat shape=(num_images X num_classes) 
>>>cls_labels = data.test.cls #mat shape=(num_images X 1) 
Traceback (most recent call last): 
    File "/home/file.py", line 5, in <module> 
    cls_labels = data.test.cls 
AttributeError: 'DataSet' object has no attribute 'cls' 

Après une recherche sur Google pour référence « .cls » dans TF, je ne pouvais trouver aucune information qui s'y rapporte.

Un exemple sale qui a fait les choses fonctionnent:

>>>data = input_data.read_data_sets("data/MNIST", one_hot=True) 
>>>data2 = input_data.read_data_sets("data/MNIST") 

>>>one_hot_labels = data.test.labels #mat shape=(num_images X num_classes) 
>>>cls_labels = data2.test.labels #mat shape=(num_images X 1) 

J'utilise tensorflow 0.10.0 sur Linux et je me demande si l'option .cls a été supprimé? Si oui, existe-t-il une méthode alternative pour coder un tableau de noms de classificateurs à partir d'un tableau de vecteurs one_hot?

Merci

+1

J'ai trouvé une solution de contournement en utilisant Numpy. Lorsque vous spécifiez one_hot = True, vous pouvez le recoder en un tableau d'étiquettes entières en utilisant: np.argmax (data.test.labels, axis = 1) – Logic1

Répondre

0

Actuellement nous utilisons l'attribut images pour les données d'image et labels pour les classes (étiquettes). Par exemple,

from tensorflow.examples.tutorials.mnist import input_data 
mnist = input_data.read_data_sets("data/MNIST", one_hot=True) 
# data 
images = mnist.test.images 
# label 
labels = mnist.test.labels 

# without one-hot 
mnist = input_data.read_data_sets("data/MNIST", one_hot=False) 
# original data 
images = mnist.test.images.reshape([-1, 28, 28]) 
print(images.shape) 
# label 
labels = mnist.test.labels 
print(labels) 
+0

J'ai remarqué que les images fonctionnent, mais c'est un vecteur aplati de données de pixels et non l'étiquette entière correspondant à son vecteur one_hot. Exemple: data.test.labels = [0,0,0,0,0,0,0,0,0,0] et data.test.cls = [7] – Logic1

+0

Oui, la fonction 'read_data_sets' d'origine transforme MNIST Si vous voulez obtenir des données originales, vous pouvez modifier l'image en "unidimensionnelle". Et si vous voulez avoir des étiquettes entières, vous devez utiliser 'one_hot = False' dans la fonction' read_data_sets'. J'ai un code de changement pour les illustrer. – daoliker