2017-02-10 7 views
2

例えば、私は、次のCSV形式でデータを持っている:テンソルは、1つの列内に複数の入力を持つカテゴリフィーチャを処理できますか?

1、2、1:3:4、2

0、1、3:5、1

..

コンマで区切られた各列は、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

おかげで、この私が、最初にこのようなプロセス、それを文字列としてリストを読みました役に立った! –

関連する問題