2017-02-10 9 views
2

Например, у меня есть данные в следующем формате CSV:Может ли тензорный поток обрабатывать категориальные функции с несколькими входами внутри одного столбца?

1, 2, 1: 3: 4, 2

0, 1, 3: 5, 1

.. .

Каждая колонка, разделенная запятой, представляет собой одну из функций. Обычно функция одна горячая (, например col0, col1, col3), но в этом случае функция для col2 имеет несколько входов (разделенных двоеточием).

Я уверен, что tensorflow может обрабатывать один-функцию горячей с разреженного тензором, но я не уверен, если он может обрабатывать функции с несколькими входами, как col2?

И если все в порядке, то как оно должно быть представлено в тензоре в тензорном потоке разреженный тензор?

ответ

3

TensorFlow имеет несколько операций обработки строк, которые могут обрабатывать списки в CSV-файлах. Я прочитал список в качестве столбца строки первой, процесс это так:

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) 

Пример использования этой функции:

# 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() 

Выходы:

[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

Спасибо, это полезно! –

 Смежные вопросы

  • Нет связанных вопросов^_^