2017-06-05 1 views
4

Für das Transferlernen wird oft ein Netzwerk als Merkmalsextraktor verwendet, um einen Datensatz zu erstellen, auf dem ein anderer Klassifikator trainiert wird (z. B. a SVM).TensorFlow: "Kann keinen statusbehafteten Knoten nach Wert erfassen" in tf.contrib.data API

Ich möchte dies implementieren, den Dataset-API (tf.contrib.data) und dataset.map():

# feature_extractor will create a CNN on top of the given tensor 
def features(feature_extractor, ...): 
    dataset = inputs(...) # This creates a dataset of (image, label) pairs 

    def map_example(image, label): 
     features = feature_extractor(image, trainable=False) 
     # Leaving out initialization from a checkpoint here... 
     return features, label 

    dataset = dataset.map(map_example) 

    return dataset 

Dadurch schlägt fehl, wenn für die Datenmenge einen Iterator zu schaffen.

Dies ist wahr, die Kernel und Verzerrungen des Netzwerks sind Variablen und damit Stateful. Für dieses spezielle Beispiel müssen sie jedoch nicht sein.

Gibt es eine Möglichkeit, Ops und speziell tf.Variable Objekte zustandslos zu machen?

Da ich tf.layers bin mit ich sie als Konstanten erstellen nicht einfach, und trainable=False Einstellung wird weder keine Konstanten schaffen, sondern nur nicht die Variablen der GraphKeys.TRAINABLE_VARIABLES Sammlung.

Antwort

9

Leider ist tf.Variable von Natur aus zustandsbehaftet. Dieser Fehler tritt jedoch nur auf, wenn Sie Dataset.make_one_shot_iterator() verwenden, um den Iterator zu erstellen. * Um das Problem zu vermeiden, können Sie stattdessen Dataset.make_initializable_iterator() mit dem Vorbehalt verwenden, dass iterator.initializer auf dem zurückgegebenen Iterator nach den Initialisierer für die tf.Variable-Objekte ausführen müssen in der Eingabe-Pipeline verwendet.


* Der Grund für diese Begrenzung ist ein Implementierungsdetail von Dataset.make_one_shot_iterator() und die Work-in-progress TensorFlow Funktion (Defun) unterstützt, dass sie die Datenmenge Definition verkapseln verwendet. Da die Verwendung zustandsbehafteter Ressourcen wie Nachschlagetabellen und Variablen beliebter ist als ursprünglich angenommen, suchen wir nach Möglichkeiten, diese Einschränkung zu lockern.

Verwandte Themen