Python 与使用TF slim的培训相比,使用vanilla Tensorflow代码无法实现相同的性能培训
以下代码使用TF Slim库加载模型并对其进行微调,在分类任务中实现了90%的性能(我省略了加载数据和预处理): 我尝试使用vanilla tensorflow重写相同的代码,以便更好地控制培训过程,由于某些原因,在使用所有相同的超参数(大写)和相同的预处理时,我无法获得相同的性能(性能下降10%)。不同之处在于图形定义:Python 与使用TF slim的培训相比,使用vanilla Tensorflow代码无法实现相同的性能培训,python,tensorflow,resnet,tf-slim,Python,Tensorflow,Resnet,Tf Slim,以下代码使用TF Slim库加载模型并对其进行微调,在分类任务中实现了90%的性能(我省略了加载数据和预处理): 我尝试使用vanilla tensorflow重写相同的代码,以便更好地控制培训过程,由于某些原因,在使用所有相同的超参数(大写)和相同的预处理时,我无法获得相同的性能(性能下降10%)。不同之处在于图形定义: lr = tf.train.exponential_decay(LEARNING_RATE, global_step, DECAY_STEPS, GAMMA
lr = tf.train.exponential_decay(LEARNING_RATE, global_step, DECAY_STEPS, GAMMA)
optimizer = tf.train.MomentumOptimizer(learning_rate=lr, momentum=MOMENTUM)
full_train_op = optimizer.minimize(total_loss, global_step=global_step)
培训:
for s in range(NUM_STEPS):
sess.run(train_init_op) #Initializes dataset iterator
while True:
try:
sess.run([full_train_op], feed_dict={is_training: True})
except tf.errors.OutOfRangeError:
break
超薄列车功能是否在执行其他操作?我认为可能是使用了批处理规范化或其他一些我没有在我的代码版本上实现的东西
是否可以在tensorflow中加载slim resnet模型,并在没有slim train功能的情况下对其进行训练?我对覆盖列车步骤不感兴趣。这可能是因为没有运行与resnet批处理规范相关的
更新操作
update_ops = tf.get_collection(tf.GraphKeys.UPDATE_OPS)
optimizer = tf.train.MomentumOptimizer(learning_rate=lr, momentum=MOMENTUM)
with tf.control_dependencies(update_ops):
full_train_op = optimizer.minimize(total_loss, global_step)
# same training loop
谢谢您的帮助,在验证过程中,我是否需要做额外的推断工作?“”True:try:sess.run(tf_metric_update,feed_dict={is_training:False}),tf.errors.OutOfRangeError:break train_acc=sess.run(tf_metric,feed_dict={is_training:False})”,其中tf_metric在图中定义为tf_metric,tf_metric_update=tf.metrics.acity(标签、预测、名称)=“精度度量”)不。更新ops仅在训练期间运行。只要为“训练”
为False,它将使用训练期间现在更新的值,而不是批次统计数据。如果不运行更新ops,评估将使用初始移动平均值。
update_ops = tf.get_collection(tf.GraphKeys.UPDATE_OPS)
optimizer = tf.train.MomentumOptimizer(learning_rate=lr, momentum=MOMENTUM)
with tf.control_dependencies(update_ops):
full_train_op = optimizer.minimize(total_loss, global_step)
# same training loop