请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

老师请问restore是怎样恢复训练好的数据的?

老师我看您把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。


0 回复 有任何疑惑可以回复我~
  • 提问者 xue109196 #1
    非常感谢!
    回复 有任何疑惑可以回复我~ 2018-08-22 21:46:34
  • 提问者 xue109196 #2
    谢谢老师,我明白了,这两天我也做了restore这方面的训练,貌似还是完全和自己的网络有关系,取完weight和bias后还是看自己要怎么用。
    老师能再追问一下restore这方面的问题吗?
    'train_op/beta2_power': [],
     'dense/bias/Adam_1': [10],
     'train_op/beta1_power': [],
     'dense/bias/Adam': [10],
     'dense/kernel/Adam': [110592, 10],
     'dense/bias': [10],
     'conv3_2/kernel/Adam_1': [3, 3, 32, 32],
     'conv3_2/bias/Adam_1': [32],
     'dense/kernel': [110592, 10],
    这是我的restore的列表的一部分。请问'dense/kernel/Adam': [110592, 10],这一部分存的是gradient吗?为什么optimizer在每一层都存另外的一份参数?这是什么原理?
    回复 有任何疑惑可以回复我~ 2018-08-22 21:52:12
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信