一、模型的保存:tf.train.Saver类中的save
TensorFlow提供了一个一个API来保存和还原一个模型,即tf.train.Saver类。以下代码为保存TensorFlow计算图的方法:
二、模型的读取:tf.train.Saver类中的restore
注意:需要重新定义的变量大小和保存的模型变量大小需相同
通过以上方式保存和加载了TensorFlow计算图上定义的全部变量。但有时候只需要保存和加载部分变量,
比如:之前训练好了一个五层的神经网络模型,现想尝试一个六层的神经网络,可将原来的五层神经网络直接加载到新的模型中,仅仅训练最后一层神经网络。
三、保存和加载部分变量:
部分:在声明tf.train.Saver类时可以提供一个列表来指定需要保存或加载的变量。
比如:在加载模型的代码中使用 saver = tf.train.Saver( [v1] ) 命令来构建tf.trian.Saver类,那么只有变量v1会被加载进来。
重命名:tf.train.Saver类支持采用字典在保存和加载时对变量进行重命名。
saver = tf.train.Saver({"v1":newv1, "v2":newv2}) :将原来名称为v1,v2加载到变量newv1和newv2中。这时候就可以给变量newv1和newv2重新修改name了。代码:
重命名的作用之一:可以使用变量的滑动平均值:
两种方法可以提取变量的滑动平均值。
①saver = tf.train.Saver( { "v/ExponentialMovingAverage":newv } )【只要创建一个v的滑动平均类,则会创建一个v的影子变量存在模型中,该代码是直接读取v的影子变量赋予给newv。】
②ema = tf.train.ExponentialMovingAverage(0.99)
saver = tf.train.Saver(ema.variables_to_restore()) 【ExponentialMovingAverage提供了一个variables_to_restore()函数直接生成代码①中提供的字典。
四、将计算图中变量变成常量:convert_variables_to_constants函数
通过这个函数可以将计算图中的变量及其取值通过常量的方式来保存。常在迁移学习中用到。
五、模型保存和加载的原理:
https://blog.csdn.net/u011026329/article/details/79190347
https://www.cnblogs.com/hellcat/p/6925757.html
https://blog.csdn.net/weixin_43215867/article/details/85163717
- model.ckpt.meta 文件保存了TensorFlow计算图的结构,可以理解为神经网络的网络结构
- model.ckpt 文件保存了TensorFlow程序中每一个变量的取值
- checkpoint 文件保存了一个目录下所有的模型文件列表
tensorflow之后的版本会保存4个文件:
checkpoint //存储checkpoint的状态,路径信息等
xxx.data //graph中变量的value
xxx.index //变量名和在data中的位置索引表
xxx.meta //graph的结构,包括 GraphDef, SaverDef等