2017-06-05 8 views
2

TF-Slim utilise sa propre boucle d'apprentissage. Cependant, je voudrais utiliser un modèle TF-Slim (Resnet50) tout en utilisant ma propre boucle d'entraînement tensorflow. Le modèle TF-Slim sort simplement la prédiction et je calcule ma propre perte totale. Je suis capable de former le modèle sans erreur et l'erreur d'entrainement semble converger. Je demande parce que j'ai éprouvé des problèmes avec la normalisation de lot pendant l'évaluation (l'erreur est très élevée comparée à l'erreur d'entraînement). J'ai découvert que cela pourrait être dû à des étapes de formation insuffisantes. Mais je veux m'assurer que je n'utilise pas correctement TF-Slim.Utilisation de Tensorflow TF-Slim sans slim.learning.train()

La procédure de formation TF-Slim ressemble à ceci:

#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): 

Je ne veux pas utiliser le train_op mais quelque chose comme ça

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 

puis appelez sess.run(train_tensor)

Est-ce cela cause des problèmes internes? Je lis ici que l'on devrait utiliser train_op: github issues

Ou est-ce tout simplement pas autorisé à passer, par exemple, train_tensor dans la fonction slim.learning.train() directement?

+0

Vous pouvez essayer de lire dans le code source de 'slim.learning.train' et disséquer la fonction pour toutes les pièces dont vous avez besoin. Cela devrait techniquement être pareil. – kwotsin

+0

Il existe plusieurs exemples de ce que vous essayez d'accomplir dans cette procédure pas à pas, espérons que cela vous aide: https://github.com/tensorflow/models/blob/master/slim/slim_walkthrough.ipynb – RoccoLacatus

Répondre

0

Je pense que vous pouvez essayer de remplacer le train_step_fn dans le paramètre liste des slim.learning.train() pour réaliser