老师请问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回答

正十七

2018-08-22

restore的是模型参数,图还是需要自己来构建的。

restore是将checkpoint中的参数恢复进来,也就是将checkpoint中的某些或者全部的参数值载入进来,我理解他的读入是依照参数名去进行读取的。参数名规范就是name_scope1/name_scope2/.../variable_name, 当然,在构建图的时候,需要保证自己构建的图和别人的checkpoint中的参数名称保持一致。

在restore的时候,init不是必须的,但之前做了init后在restore相当于覆盖。所以也没有关系。

eval_ops是你在构建图的时候自行添加的,我们需要的是别人训练好的参数值,模型图中有些和参数值有关,比如卷积层,全链接层,这些部分我们不能擅自修改超参数(卷积核大小,卷积数目等),但对于和参数无关的部分,比如train_op, loss, accuracy, 你可以自行定义。

我理解,构建图是在代码中做的。所以如果你用的别人的图,那么你肯定会有别人的代码了。这样,你可以改他的源码来修改是否可以train。


0
2
xue109196
谢谢老师,我明白了,这两天我也做了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
共2条回复

深度学习之神经网络(CNN/RNN/GAN)算法原理+实战

深度学习算法工程师必学,深入理解深度学习核心算法CNN RNN GAN

2617 学习 · 935 问题

查看课程