stackoverflow 的答案
保存变量:
保存变量很简单,只需定义saver对象然后调用save函数就可以
结果是生成4个文件:
checkpoint:保存一个目录下所有模型文件列表
t.ckpt.meta:保存网络图结构
t.ckpt.index:?
t.ckpt.data-00000-of-00001:变量文件
注意在实际工程中经常会将global_step也保存进去,这样在读取文件的时候就需要注意了
读取文件的文件名变成
复原变量:
因为meta文件保存了计算图结构,所以在复原的时候也可以直接利用这个文件,这样就不用重复的定义计算图结构了。
下面示范利用meta文件加载计算图
保存文件的时候最后对变量做好命名,这样方便取用
这样在加载权值的时候,即使不重新定义计算图,只需要知道计算几点的名称,也一样能够得到节点的图结构
将变量与结构存在一个文件中(.pb文件)
在实际工程中,网络训练好后就只需要跑前向预测就行,那么一些保存变量,初始化的部分就没有用了,但是假如用上面的方法会保存全部的计算图结构。
比如保存一个神经网络的最后一层输出节点 y_score,在运行的时候只需要加载出这个节点的输出张量,就可以直接运行前向预测,而与y_score无关的节点信息将不会被保存
下面介绍一种将变量和结构存在一个文件中的方法
保存成 .pb文件
这里要注意的是:
保存的节点add_v3会保存节点v1,v2因为需要这些节点运算得出add_v3,但是不会保存mul_v4因为不需要这个节点就能得到add_v3的值
但是假如为保存的节点为 ['mul_v4']的话 add_v3也会被保存,因为需要这个节点的信息才能计算出'mul_v4'节点