TensorFlow模型文件
- Checkpoints
- Frozen Graph
- SavedModel
- HDF5
模型导出包含网络结构和参数,可能是分别导出或者整合为一个独立的文件:
- 参数和网络结构分开保存:Checkpoints、SavedModel
- 只保存权重:HDF5
- 参数和权重保存在一个文件:Frozen Graph、HDF5
Checkpoint
1、组成
"""model.ckpt-13000表示前缀,代表第13000 steps时保存的结果,加载指定checkpoint时,仅说明前缀即可。checkpoint示意:model_checkpoint_path: "model.ckpt-16329"all_model_checkpoint_paths: "model.ckpt-13000"all_model_checkpoint_paths: "model.ckpt-14000"all_model_checkpoint_paths: "model.ckpt-15000"all_model_checkpoint_paths: "model.ckpt-16000"all_model_checkpoint_paths: "model.ckpt-16329""""# 1. 参数checkpoint # 表示该目录下保存的所有的checkpoint列表model.ckpt-13000.index # 表示参数名model.ckpt-13000.data-00000-of-00001 # 表示参数值# 2. 网络结构model.ckpt-13000.meta # 表示网络结构
2、保存
## TF-1.X# 1. 默认保存所有变量saver = tf.train.Saver()# 2. 指定需要保存的向量w1 = tf.Variable(tf.random_normal(shape=[2]), name='w1')w2 = tf.Variable(tf.random_normal(shape=[5]), name='w2')saver = tf.train.Saver([w1,w2])# 3. 保存最新的4个模型,每2h保存一次saver = tf.train.Saver(max_to_keep=4, keep_checkpoint_every_n_hours=2)sess = tf.Session()sess.run(tf.global_variables_initializer())# 1. 默认保存# saver.save(sess=sess, save_path='ckpt')saver.save(sess, 'ckpt')# 2. 迭代1000次后保存模型saver.save(sess, 'ckpt', global_step=1000)# 3. 迭代1000次后保存模型,网络结构不需要重复保存saver.save(sess, 'ckpt', global_step=1000, write_meta_graph=False)# TF-2.X# TF-2.x keras
3、导入
# 1. 导入网络结构saver = tf.train.import_meta_graph('my_test_model-1000.meta')# 2. 加载变量with tf.Session() as sess:new_saver = tf.train.import_meta_graph('my_test_model-1000.meta')## TODO:new_saver.restore(sess, tf.train.latest_checkpoint('./')) # 获取最新的ckpt
