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.