2017-04-05 3 views
0

J'essaie d'entrer dans l'apprentissage automatique et j'ai décidé d'utiliser tflearn pour un début. J'ai utilisé le guide de démarrage rapide de tflearn pour obtenir les bases et essayé d'utiliser ce réseau de neurones pour une tâche que j'ai moi-même définie: Prédire l'âge des abalones à partir de leurs dimensions. Pour cela, j'ai téléchargé l'ensemble de données correspondant en tant que .csv à partir du référentiel UCI. Le tableau est dans ce format:Impossible d'alimenter la valeur de la forme (1600,) pour Tensor 'TargetsData/Y: 0', qui a la forme '(?, 1)'

SEXE | LONGUEUR | DIAMÈTRE | HAUTEUR | ENTIER POIDS | décortiqués POIDS | VISCÈRES POIDS | SHELL POIDS | ANNEAUX

Depuis l'âge est le même que le nombre de sonneries, j'importé le .csv comme ceci:

data, labels = load_csv("abalone.csv", categorical_labels=False, has_header=False) 

la tâche est de prédire le nombre de sonneries à partir des données, donc je mis ma couche d'entrée comme ceci:

net = tflearn.input_data(shape=[None, 8]) 

Ajouté quatre couches cachées avec la fonction d'activation linéaire par défaut:

net = tflearn.fully_connected(net, 320) 
net = tflearn.fully_connected(net, 200) 
net = tflearn.fully_connected(net, 200) 
net = tflearn.fully_connected(net, 320) 

Et une couche de sortie avec un nœud car il n'y a qu'un seul résultat (no. des anneaux):

net = tflearn.fully_connected(net, 1, activation="sigmoid") 
net = tflearn.regression(net) 

Maintenant, j'initialiser le modèle, mais au cours de la formation de l'erreur ci-dessus se produit:

model = tflearn.DNN(net) 
model.fit(data, labels, n_epoch=1000, show_metric=True, batch_size=1600) 

L'exception entière:

Traceback (most recent call last): 
    File "D:\OneDrive\tensornet.py", line 34, in <module> 
    model.fit(data, labels, n_epoch=1000, show_metric=True, batch_size=1600) 
    File "C:\Python3\lib\site-packages\tflearn\models\dnn.py", line 215, in fit 
    callbacks=callbacks) 
    File "C:\Python3\lib\site-packages\tflearn\helpers\trainer.py", line 333, in fit 
    show_metric) 
    File "C:\Python3\lib\site-packages\tflearn\helpers\trainer.py", line 774, in _train 
    feed_batch) 
    File "C:\Python3\lib\site-packages\tensorflow\python\client\session.py", line 767, in run 
    run_metadata_ptr) 
    File "C:\Python3\lib\site-packages\tensorflow\python\client\session.py", line 944, in _run 
    % (np_val.shape, subfeed_t.name, str(subfeed_t.get_shape()))) 
ValueError: Cannot feed value of shape (1600,) for Tensor 'TargetsData/Y:0', which has shape '(?, 1)' 

D'après ce que je comprends, l'exception se produit en essayant d'adapter mes étiquettes (qui sont un 1600x1 Tenseur) avec ma couche de sortie. Mais je ne sais pas comment réparer ça.

Répondre

1

Vous devez ajouter un autre axe pour les étiquettes de sorte qu'ils auront un (1600,1) forme au lieu de (1600,)

La façon la plus simple de le faire est comme ceci:

labels = labels[:, np.newaxis] 
+0

Merci pour votre réponse. Mais quand j'essaye ceci, une autre exception se présente: TypeError: les index de liste doivent être des entiers ou des tranches, pas des tuples –

+0

Vous devez changer la liste en un tableau numpy, comme ceci: labels = np.asarray (labels) [: , np.newaxis] – mangate

+0

Ahh merci, ça a marché. –