Python 使用Tensorflow TF Slim而不使用Slim.learning.train()

Python 使用Tensorflow TF Slim而不使用Slim.learning.train(),python,machine-learning,tensorflow,tf-slim,Python,Machine Learning,Tensorflow,Tf Slim,TF Slim使用自己的训练循环。然而,我想使用TF Slim模型(Resnet50),同时仍然使用我自己的tensorflow训练循环。TF Slim模型只输出预测,我计算自己的总损失。我能够无误差地训练模型,训练误差似乎收敛。我这样问是因为我在评估期间遇到了批量规范化问题(与培训错误相比,错误非常高)。我发现这可能是因为训练步骤不够。但我想确保我没有错误地使用TF Slim TF Slim培训程序如下所示: #create_train_op ensures that each time we

TF Slim使用自己的训练循环。然而,我想使用TF Slim模型(Resnet50),同时仍然使用我自己的tensorflow训练循环。TF Slim模型只输出预测,我计算自己的总损失。我能够无误差地训练模型,训练误差似乎收敛。我这样问是因为我在评估期间遇到了批量规范化问题(与培训错误相比,错误非常高)。我发现这可能是因为训练步骤不够。但我想确保我没有错误地使用TF Slim

TF Slim培训程序如下所示:

#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):
我不想使用
train\u op
,而是这样的东西

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
然后调用sess.run(训练张量)

这是否会导致内部问题?我在这里读到人们应该使用
train\u op

或者它只是不允许通过,例如,
train\u tensor

slim.learning.train()
函数直接执行?

我认为您可以尝试覆盖slim.learning.train()参数列表中的train\u fn步骤来实现它

您可以尝试阅读
slim.learning.train
的源代码,并对函数进行必要的分解。技术上应该是一样的。在本演练中,有几个示例说明了您试图实现的目标,希望对您有所帮助: