Ich versuche, die letzte Schicht der Einführung-resnet-v2 umschulen. Hier ist, was ich kam mit:Umschulung der letzten Schicht von Inception-ResNet-v2
- Get Namen von Variablen in der letzten Schicht
- eine
train_op
Erstellen Sie nur diese Variablen WRT Verlust - Wiederherstellen des gesamten Graphen mit Ausnahme der letzten Schicht zu minimieren, während nur die letzte Initialisierung Ebene zufällig.
Und ich realisiert, dass Sie wie folgt vor:
with slim.arg_scope(arg_scope):
logits = model(images_ph, is_training=True, reuse=None)
loss = tf.reduce_mean(tf.nn.sparse_softmax_cross_entropy_with_logits(logits, labels_ph))
accuracy = tf.contrib.metrics.accuracy(tf.argmax(logits, 1), labels_ph)
train_list = tf.get_collection(tf.GraphKeys.TRAINABLE_VARIABLES, 'InceptionResnetV2/Logits')
optimizer = tf.train.AdamOptimizer(learning_rate=FLAGS.learning_rate)
train_op = optimizer.minimize(loss, var_list=train_list)
# restore all variables whose names doesn't contain 'logits'
restore_list = tf.get_collection(tf.GraphKeys.TRAINABLE_VARIABLES, scope='^((?!Logits).)*$')
saver = tf.train.Saver(restore_list, write_version=tf.train.SaverDef.V2)
with tf.Session() as session:
init_op = tf.group(tf.local_variables_initializer(), tf.global_variables_initializer())
session.run(init_op)
saver.restore(session, '../models/inception_resnet_v2_2016_08_30.ckpt')
# followed by code for running train_op
Dies nicht zu funktionieren scheint (Trainingsausfall, Fehler verbessern nicht viel von der ursprünglichen Werte). Gibt es eine bessere/elegante Möglichkeit, dies zu tun? Es wäre gut für mich zu lernen, wenn Sie mir auch sagen könnten, was hier schief läuft.
Ich bin nicht sicher, wie Sie die Variablen nennen, aber Sie können überprüfen, ob train_list von 'Druck train_list' korrekt ist. Vielleicht könnte [this] (http://stackoverflow.com/questions/34945554/how-to-set-layer-wise-learning-rate-in-tensorflow) Ihnen helfen, was Sie vielleicht schon gesehen haben. – Seven