2017-02-10 2 views
2

Par exemple, j'ai données au format csv suivant:Le tensorflow peut-il gérer des entités catégorielles avec plusieurs entrées dans une même colonne?

1, 2, 1: 3: 4, 2

0, 1, 3: 5, 1

..

Chaque colonne séparée par une virgule représente une caractéristique. Normalement, une fonctionnalité est à une seule valeur (, par exemple, col0, col1, col3), mais dans ce cas, la fonctionnalité col2 a plusieurs entrées (séparées par deux points).

Je suis sûr que tensorflow peut gérer un élément chaud avec tenseur clairsemée, mais je ne suis pas sûr si elle pouvait gérer fonction avec plusieurs entrées comme col2?

Et si oui, comment devrait-il être représenté dans le tenseur de tensorflow?

Répondre

3

TensorFlow dispose de certaines opérations de traitement de chaîne qui peuvent gérer les listes au sein des fichiers CSV. Je lis la liste comme une colonne de chaîne en premier lieu, le processus comme ceci:

def process_list_column(list_column, dtype=tf.float32): 
    sparse_strings = tf.string_split(list_column, delimiter=":") 
    return tf.SparseTensor(indices=sparse_strings.indices, 
         values=tf.string_to_number(sparse_strings.values, 
                out_type=dtype), 
         dense_shape=sparse_strings.dense_shape) 

Un exemple d'utilisation de cette fonction:

# csv_input.csv contains: 
# 1,2,1:3:4,2 
# 0,1,3:5,1 
filename_queue = tf.train.string_input_producer(["csv_input.csv"]) 
# Read two lines, batched 
_, lines = tf.TextLineReader().read_up_to(filename_queue, 2) 
columns = tf.decode_csv(lines, record_defaults=[[0], [0], [""], [0]]) 
columns[2] = process_list_column(columns[2], dtype=tf.int32) 

with tf.Session() as session: 
    coordinator = tf.train.Coordinator() 
    tf.train.start_queue_runners(session, coord=coordinator) 

    print(session.run(columns)) 

    coordinator.request_stop() 
    coordinator.join() 

Sorties:

[array([1, 0], dtype=int32), 
array([2, 1], dtype=int32), 
SparseTensorValue(indices=array([[0, 0], 
     [0, 1], 
     [0, 2], 
     [1, 0], 
     [1, 1]]), 
    values=array([1, 3, 4, 3, 5], dtype=int32), 
    dense_shape=array([2, 3])), 
array([2, 1], dtype=int32)] 
+0

Merci, cette est utile! –