2017-06-05 5 views
2

TF-Slim verwendet eine eigene Trainingsschleife. Allerdings würde ich gerne ein TF-Slim-Modell (Resnet50) verwenden, während ich immer noch meine eigene Tensorflow-Trainingsschleife verwende. Das TF-Slim-Modell gibt einfach die Vorhersage aus und ich berechne meinen eigenen Gesamtverlust. Ich kann das Modell ohne Fehler trainieren und der Trainingsfehler scheint zu konvergieren. Ich frage, weil ich Probleme mit der Batch-Normalisierung während der Auswertung hatte (der Fehler ist sehr hoch im Vergleich zum Trainingsfehler). Ich fand heraus, dass dies auf unzureichende Trainingsschritte zurückzuführen sein könnte. Aber ich möchte sicherstellen, dass ich TF-Slim nicht falsch verwende.Verwendung von Tensorflow TF-Slim ohne slim.learning.train()

Der TF-Slim Trainingsverfahren sieht wie folgt aus:

#create_train_op ensures that each time we ask for the loss, the 
update_ops 
# are run and the gradients being computed are applied too. 

train_op = slim.learning.create_train_op(total_loss, optimizer) 
logdir = ... # Where checkpoints are stored. 

slim.learning.train(
    train_op, 
    logdir, 
    number_of_steps=1000, 
    save_summaries_secs=300, 
    save_interval_secs=600): 

Ich will nicht die train_op aber so etwas wie dieses und rufen sess.run(train_tensor)

Does dann

def update_gradients(update_ops, optimizer, total_loss, variables_to_train, global_step, summaries): 
    for grad, var in gradients: 
     if grad is not None: 
     summaries.add(tf.summary.histogram(var.op.name + '/gradients', grad)) 
    grad_updates = optimizer.apply_gradients(gradients, 
             global_step=global_step) 
    update_ops.append(grad_updates) 

    update_op = tf.group(*update_ops) 
    with tf.control_dependencies([update_op]): 
     train_tensor = tf.identity(total_loss, name='train_op') 
     return train_tensor 

verwenden dies verursacht Probleme intern? Ich lese hier, dass man train_op verwenden sollte: github issues

Oder ist es einfach nicht passieren darf, zum Beispiel train_tensor in die slim.learning.train() Funktion direkt?

+0

Sie können versuchen, von 'slim.learning.train' in den Quellcode zu lesen und sezieren die Funktion für welche Teile Sie auch brauchen. Es sollte technisch gleich sein. – kwotsin

+0

Es gibt einige Beispiele für das, was Sie in dieser Anleitung erreichen möchten. Ich hoffe, es hilft Ihnen dabei: https://github.com/tensorflow/models/blob/master/slim/slim_walkthrough.ipynb – RoccoLacatus

Antwort

0

Ich glaube, Sie können versuchen, die train_step_fn in der Parameterliste der slim.learning.train außer Kraft zu setzen() zu erkennen, es

Verwandte Themen