计算图结构
- MetaGraphDef(计算图)
- MetaInfoDef(运算方法)
- OpList(运算方法集合)
- OpDef(运算方法)
- ArgDef(输入,输出)
- AttrDef(属性)
- OpDef(运算方法)
- OpList(运算方法集合)
- GraphDef (连接结构)
- NodeDef(节点)
- SaverDef (模型持久化)
- CheckpointFormatVersion(模型定义使用的版本)
- map<string, CollectionDef> (集合)
- NodeList(节点value)
- BytesList(序列化value)
- map<string, SignatureDef>(签名)
- AssetFileDef (权重值)
- MetaInfoDef(运算方法)
SaverDef
https://github.com/tensorflow/tensorflow/blob/r1.11/tensorflow/core/protobuf/saver.proto
记录持久化模型时需要用到的一些参数,比如保存到的文件名,保存操作和加载操作的名称以及保存频率,清理历史记录等
message SaverDef {
//保存或恢复模型checkpoint时的张量名称。
string filename_tensor_name = 1;
//给出持久化运算所对应的节点名称
string save_tensor_name = 2;
//恢复模型checkpoint时要运行的操作名称。
string restore_op_name = 3;
//要保留的最大checkpoint数。 如果为0,则不删除checkpoint。
//如果保存checkpoint数量大于了max_to_keep则把之前的check删除
int32 max_to_keep = 4;
// 是否分割保存文件,每个设备有一个具有Variable节点的文件。
bool sharded = 5;
//每经过多长时间额外保存一个
//多久保留一个额外的checkpoint。
//如果未指定,则仅保留最后一个“max_to_keep”checkpoint;
//如果指定,除了保留最后一个“max_to_keep”checkpoint之外,
//每n小时的训练将保留一个额外的checkpoint。
float keep_checkpoint_every_n_hours = 6;
// checkpoint 格式版本
// 用于识别已保存的(在磁盘内)checkpoint
CheckpointFormatVersion version = 7;
}
max_to_keep和keep_checkpoint_every_n_hours可以在实例化tf.trian.Saver()类的时候进行定义。
CheckpointFormatVersion
enum CheckpointFormatVersion {
//内部遗留格式。
LEGACY = 0;
// 不推荐使用的格式:tf.Saver(),它与tensorflow :: table :: Table一起使用。
V1 = 1;
// 目前的格式:tf.train.Saver() 效率更高。
V2 = 2;
}
案例
saver_def {
//保存的张量名称
filename_tensor_name : "save/Const:0"
//保存时运行的节点
save_tensor_name : "save/control_dependency:0"
//恢复时运行的节点
restore_op_name : "save/restore_all"
//最多保存5给checkpoint
max_to_keep : 5
//没每间隔10000.0多保存一个checkpoint
keep_checkpoint_every_n_hours: 10000.0
}