老师请问restore是怎样恢复训练好的数据的?
来源:5-6 fine-tune-实战
xue109196
2018-08-20
老师我看您把saver.restore放在了sess.run(init)后面了,也就是说用新的sess的状态替换了旧的状态吗?那么还用run(init)吗?restore这个函数到底恢复的是整个graph还是什么呢?
老师您后来还把自己的layer设定成不能训练了,那么请问如果我们用的是别人的图,要怎样设定这个呢?
如果我们用别人训练好的图,他的eval_ops不是[loss, accurary, train_op}怎么办?那是要在下一个sess.run()里面写什么?
能否请您细说一下这个restore呢?感觉完全不懂……
---------------------------------更新-------------------------
这两天发现了tf.train.NewCheckpointReader可以读这个保存的weight,可以按name把kernel/filter的参数取回来。
1回答
-
restore的是模型参数,图还是需要自己来构建的。
restore是将checkpoint中的参数恢复进来,也就是将checkpoint中的某些或者全部的参数值载入进来,我理解他的读入是依照参数名去进行读取的。参数名规范就是name_scope1/name_scope2/.../variable_name, 当然,在构建图的时候,需要保证自己构建的图和别人的checkpoint中的参数名称保持一致。
在restore的时候,init不是必须的,但之前做了init后在restore相当于覆盖。所以也没有关系。
eval_ops是你在构建图的时候自行添加的,我们需要的是别人训练好的参数值,模型图中有些和参数值有关,比如卷积层,全链接层,这些部分我们不能擅自修改超参数(卷积核大小,卷积数目等),但对于和参数无关的部分,比如train_op, loss, accuracy, 你可以自行定义。
我理解,构建图是在代码中做的。所以如果你用的别人的图,那么你肯定会有别人的代码了。这样,你可以改他的源码来修改是否可以train。
022018-08-22
相似问题