if mAP > best_mAP:
best_mAP = mAP
saver_best.save(sess, args.save_dir + 'best_model_Epoch_{}_step_{}_mAP_{:.4f}_loss_{:.4f}_lr_{:.7g}'.format(
epoch, int(__global_step), best_mAP, val_loss_total.average, __lr))
如上部分代码,当训练结果比预设的best_mAP好,则保存此时的TensorFlow 训练模型,此时,在第几个epoch,第几个global_step,最好的best_mAP值,平均验证损失val_loss_total.average,lr。
tf.train.Saver().save(sess, 'ckpts/')在ckpts/ 路径下主要保存四个文件checkpoint:
checkpoint:model.ckpt.data-00000-of-00001: 某个ckpt的数据文件,保存每个变量的取值,保存的是网络的权值,偏置,操作等等。
model.ckpt.index :某个ckpt的index文件 二进制 或者其他格式 不可直接查看 。是一个不可变得字符串表,每一个键都是张量的名称,它的值是一个序列化的BundleEntryProto。 每个BundleEntryProto描述张量的元数据:“数据”文件中的哪个文件包含张量的内容,该文件的偏移量,校验和,一些辅助数据等等。
model.ckpt.meta:某个ckpt的meta数据 二进制 或者其他格式 不可直接查看,保存了TensorFlow计算图的结构信息。model.ckpt-200.meta文件保存的是图结构,通俗地讲就是神经网络的网络结构。一般而言网络结构是不会发生改变,所以可以只保存一个就行了。我们可以使用下面的代码只在第一次保存meta文件。
checkpoint:记录训练较好的几次训练结果
本人训练后的checkpoint文件内容,如下(Epoch 26,30,34,94,98,):
model_checkpoint_path: "best_model_Epoch_98_step_50291_mAP_0.7358_loss_3.6063_lr_1e-05"
all_model_checkpoint_paths: "best_model_Epoch_26_step_13715_mAP_0.7163_loss_3.3344_lr_0.0001"
all_model_checkpoint_paths: "best_model_Epoch_30_step_15747_mAP_0.7211_loss_3.3941_lr_0.0001"
all_model_checkpoint_paths: "best_model_Epoch_34_step_17779_mAP_0.7317_loss_3.3543_lr_3e-05"
all_model_checkpoint_paths: "best_model_Epoch_94_step_48259_mAP_0.7328_loss_3.5932_lr_1e-05"
all_model_checkpoint_paths: "best_model_Epoch_98_step_50291_mAP_0.7358_loss_3.6063_lr_1e-05"
模型加载需要利用Saver.restore方法。可以加载固定参数,也可以加在所有参数。
tf.train.Saver.restore(sess,model_path)
训练过程保存了大量tensorflow模型 :
-4.2$ ls
best_model_Epoch_10_step_5664_mAP_0.0729_loss_8.1562_lr_0.0001.data-00000-of-00001
best_model_Epoch_10_step_5664_mAP_0.0729_loss_8.1562_lr_0.0001.index
best_model_Epoch_10_step_5664_mAP_0.0729_loss_8.1562_lr_0.0001.meta
best_model_Epoch_12_step_6694_mAP_0.0748_loss_7.4896_lr_0.0001.data-00000-of-00001
best_model_Epoch_12_step_6694_mAP_0.0748_loss_7.4896_lr_0.0001.index
best_model_Epoch_12_step_6694_mAP_0.0748_loss_7.4896_lr_0.0001.meta
best_model_Epoch_16_step_8754_mAP_0.0775_loss_7.6105_lr_0.0001.data-00000-of-00001
best_model_Epoch_16_step_8754_mAP_0.0775_loss_7.6105_lr_0.0001.index
best_model_Epoch_16_step_8754_mAP_0.0775_loss_7.6105_lr_0.0001.meta
best_model_Epoch_20_step_10814_mAP_0.0715_loss_8.2555_lr_0.0001.data-00000-of-00001
best_model_Epoch_20_step_10814_mAP_0.0715_loss_8.2555_lr_0.0001.index
best_model_Epoch_20_step_10814_mAP_0.0715_loss_8.2555_lr_0.0001.meta
best_model_Epoch_24_step_12874_mAP_0.0717_loss_8.5067_lr_0.0001.data-00000-of-00001
best_model_Epoch_24_step_12874_mAP_0.0717_loss_8.5067_lr_0.0001.index
best_model_Epoch_24_step_12874_mAP_0.0717_loss_8.5067_lr_0.0001.meta
best_model_Epoch_26_step_13715_mAP_0.7163_loss_3.3344_lr_0.0001.data-00000-of-00001
best_model_Epoch_26_step_13715_mAP_0.7163_loss_3.3344_lr_0.0001.index
best_model_Epoch_26_step_13715_mAP_0.7163_loss_3.3344_lr_0.0001.meta
best_model_Epoch_26_step_13904_mAP_0.0726_loss_8.5469_lr_0.0001.data-00000-of-00001
best_model_Epoch_26_step_13904_mAP_0.0726_loss_8.5469_lr_0.0001.index
best_model_Epoch_26_step_13904_mAP_0.0726_loss_8.5469_lr_0.0001.meta
best_model_Epoch_26_step_13904_mAP_0.0788_loss_7.9227_lr_0.0001.data-00000-of-00001
best_model_Epoch_26_step_13904_mAP_0.0788_loss_7.9227_lr_0.0001.index
best_model_Epoch_26_step_13904_mAP_0.0788_loss_7.9227_lr_0.0001.meta
best_model_Epoch_28_step_14731_mAP_0.7189_loss_3.2645_lr_0.0001.data-00000-of-00001
best_model_Epoch_28_step_14731_mAP_0.7189_loss_3.2645_lr_0.0001.index
best_model_Epoch_28_step_14731_mAP_0.7189_loss_3.2645_lr_0.0001.meta
best_model_Epoch_30_step_15747_mAP_0.7211_loss_3.3941_lr_0.0001.data-00000-of-00001
best_model_Epoch_30_step_15747_mAP_0.7211_loss_3.3941_lr_0.0001.index
best_model_Epoch_30_step_15747_mAP_0.7211_loss_3.3941_lr_0.0001.meta
best_model_Epoch_30_step_15747_mAP_0.7310_loss_3.4142_lr_0.0001.data-00000-of-00001
best_model_Epoch_30_step_15747_mAP_0.7310_loss_3.4142_lr_0.0001.index
best_model_Epoch_30_step_15747_mAP_0.7310_loss_3.4142_lr_0.0001.meta
best_model_Epoch_30_step_15964_mAP_0.0797_loss_8.0055_lr_0.0001.data-00000-of-00001
best_model_Epoch_30_step_15964_mAP_0.0797_loss_8.0055_lr_0.0001.index
best_model_Epoch_30_step_15964_mAP_0.0797_loss_8.0055_lr_0.0001.meta
best_model_Epoch_32_step_16763_mAP_0.7343_loss_3.3788_lr_0.0001.data-00000-of-00001
best_model_Epoch_32_step_16763_mAP_0.7343_loss_3.3788_lr_0.0001.index
best_model_Epoch_32_step_16763_mAP_0.7343_loss_3.3788_lr_0.0001.meta
best_model_Epoch_34_step_17779_mAP_0.7317_loss_3.3543_lr_3e-05.data-00000-of-00001
best_model_Epoch_34_step_17779_mAP_0.7317_loss_3.3543_lr_3e-05.index
best_model_Epoch_34_step_17779_mAP_0.7317_loss_3.3543_lr_3e-05.meta
best_model_E