0

Je suis très nouveau sur TensorFlow. J'ai essayé d'utiliser TensorFlow pour créer une fonction où je lui donne un vecteur avec 6 fonctions et récupère une étiquette.TensorFlow - Classification avec des milliers d'étiquettes

J'ai un ensemble de données d'apprentissage sous la forme de 6 caractéristiques et 1 étiquette. L'étiquette est dans la première colonne:

309,3,0,2,4,0,6 
309,12,0,2,4,0,6 
309,0,4,17,2,0,6 
318,0,660,414,58,3,12 
311,0,0,414,58,0,2 
298,0,53,355,5,0,2 
60,16,14,381,30,4,2 
312,0,8,8,13,0,3 
... 

Je l'index des étiquettes qui est une liste de milliers et des milliers de noms:

309,Joe 
318,Joey 
311,Bruce 
... 

Comment puis-je créer un modèle et le train à l'aide TensorFlow pour pouvoir prédire l'étiquette, donné un vecteur sans la première colonne?

-

C'est ce que j'ai essayé:

from __future__ import print_function 
import tflearn 

name_count = sum(1 for line in open('../../names.csv')) # this comes out to 24260 

# Load CSV file, indicate that the first column represents labels 
from tflearn.data_utils import load_csv 
data, labels = load_csv('../../data.csv', target_column=0, 
        categorical_labels=True, n_classes=name_count) 


# Build neural network 
net = tflearn.input_data(shape=[None, 6]) 
net = tflearn.fully_connected(net, 32) 
net = tflearn.fully_connected(net, 32) 
net = tflearn.fully_connected(net, 2, activation='softmax') 
net = tflearn.regression(net) 

# Define model 
model = tflearn.DNN(net) 
# Start training (apply gradient descent algorithm) 
model.fit(data, labels, n_epoch=10, batch_size=16, show_metric=True) 

# Predict 
pred = model.predict([[218,5,124,26,0,3]]) # 326 
print("Name:", pred[0][1]) 

Il est basé sur https://github.com/tflearn/tflearn/blob/master/tutorials/intro/quickstart.md
Je reçois l'erreur:

ValueError: Cannot feed value of shape (16, 24260) for Tensor u'TargetsData/Y:0', which has shape '(?, 2)' 

24260 est le nombre de lignes dans les noms. csv

Merci beaucoup!

+0

Qu'avez-vous déjà essayé? Demandez-vous "comment fonctionne l'apprentissage supervisé?" ou "comment écrire du code pour faire un apprentissage supervisé avec tensorflow?" ou est-ce que vous vous souciez du nombre de classes que vous essayez de classer? Avez-vous regardé softmax hiérarchique? –

+0

@RyanStout édité, merci! Étant donné que tous les exemples d'apprentissage supervisé que j'ai vu ont seulement environ 2 ou 3 étiquettes, je ne suis même pas sûr de la méthode que je devrais utiliser. Mais ma question est de savoir comment résoudre cela avec du code. –

Répondre

1
net = tflearn.fully_connected(net, 2, activation='softmax') 

cherche à dire que vous avez 2 classes de sortie, mais en réalité vous avez 24260. 16 est la taille de votre minibatch, vous avez donc 16 lignes de 24260 colonnes (une de ces 24260 sera 1, les autres seront tous des 0).

+0

Je remplace 2 avec name_count et cela a fonctionné! –