2017-02-10 5 views
1

Sagen wir, ich TFRecord Beispiele mit folgendem Merkmal Mapping haben:Tensorflow - Wählen TFRecord auf der Graph Funktionen Tim bauen

feature_mapping = { 
"sentence":tf.VarLenFeature(tf.string), 
'caps':tf.VarLenFeature(tf.string), 
'tags':tf.VarLenFeature(tf.string), 
'labels': tf.VarLenFeature(tf.string) 
} 

ich immer brauchen sentence und labels, aber manchmal möchte ich 0,1 oder mehr der verbleibende Funktionen. Ich weiß, welche Funktionen ich bei der Graph-Build-Zeit haben möchte.

Wie kann ich mehrere Funktionen im Graph der Zeit wählen?

Zum Beispiel Satz und Etiketten, kein Problem:

parsed = tf.parse_example(example, features=feature_mapping) 
sentence = parsed['sentence'] 
labels = parsed['labels'] 

Aber kann ich mehrere Funktionen herausziehen? Ie .:

FEATURE_NAMES = ['caps', 'tags'] 
parsed = tf.parse_example(example, features=feature_mapping) 
features = tf.multiple_features(parsed, FEATURE_NAMES] # Does something like this exist? 

Ich bin bereit, meine TFRecord Darstellung auch zu ändern. Jede Hilfe wäre willkommen.

Danke!

+1

Es ist nur ein Python-Wörterbuch, oder? Sie können also etwas wie '[geparst [k] für k in FEATURE_NAMES]' machen, um eine Liste zu erhalten. –

+0

Ja, aber wird das für die Graphendarstellung funktionieren? Ich habe Schleifen komplett in TF vermieden. – Neal

+1

Es sei denn, es gibt Hunderte von diesen sammeln, ich würde mir keine Sorgen machen. Und wenn es, würden Sie einige Spalten verketten müssen, anstatt die Änderung der Art, wie sie in diesem Wörterbuch nachgeschlagen bekommen einen Unterschied in der Leistung zu machen .. –

Antwort

1

Dank @Allen Lavoie für den Hinweis auf, dass es eine einfache Lösung ist. Ich musste sie in eine Liste setzen, und dann nach diesem Post here, ich brauchte nur tf.pack in eine Liste. Unten ist die Lösung.

# get features 
FEATURES = ['labels', 'caps'] 
output_list = [] 
for f in range(len(FEATURES)): 
    feats = parsed[FEATURES[f]] 
    dense_feats = tf.sparse_tensor_to_dense(feats, default_value='<PAD>') 
    output_list.append(dense_feats) 

features = tf.pack(output_list) 
Verwandte Themen