tensorflow加载部分层方法


自动保存为三个文件:模型文件列表checkpoint,计算图结构model.ckpt.meta,每个变量的取值model.ckpt


checkpoint文件保存了一个目录下所有的模型文件列表,这个文件是tf.train.Saver类自动生成且自动维护的。在 checkpoint文件中维护了由一个tf.train.Saver类持久化的所有TensorFlow模型文件的文件名。当某个保存的TensorFlow模型文件被删除时,这个模型所对应的文件名也会从checkpoint文件中删除。checkpoint中内容的格式为CheckpointState Protocol Buffer.


model.ckpt.meta文件保存了TensorFlow计算图的结构,可以理解为神经网络的网络结构 
TensorFlow通过元图(MetaGraph)来记录计算图中节点的信息以及运行计算图中节点所需要的元数据。TensorFlow中元图是由MetaGraphDef Protocol Buffer定义的。MetaGraphDef 中的内容构成了TensorFlow持久化时的第一个文件。保存MetaGraphDef 信息的文件默认以.meta为后缀名,文件model.ckpt.meta中存储的就是元图数据.


model.ckpt文件保存了TensorFlow程序中每一个变量的取值,这个文件是通过SSTable格式存储的,可以大致理解为就是一个(key,value)列表。

 

一般使用

saver.restore(sess, modeldir + "model.ckpt")

即可加载已经训练好的网络,可是有时候想值使用部分层的参数,这时候可以选择在加载网络之后重新初始化剩下的层


var_list = [weights['wd1'], weights['out'], biases['bd1'], biases['out'], global_step]

initfc = tf.variables_initializer(var_list, name='init')

比如我们想从新初始化var_list中的各个层,在restore之后,再初始化即可


sess.run(init)

saver.restore(sess, modeldir + "model.ckpt")

print sess.run(global_step)

#initialize several layer

sess.run(initfc)

print sess.run(global_step)

即可发现部分变量重新初始化了

 


 

 

 

 

你可能感兴趣的:(Python学习,tensorflow)