Tensorflow:使用其他图层微调模型,未找到密钥错误

时间:2017-08-27 22:12:37

标签: tensorflow neural-network deep-learning

所以,我有一个架构,让我们说我有几层,让我们用Arc1表示它:A1->A2->A3->A4->Loss1。我训练这个架构有一个损失函数:Loss1。

我有一个新的架构Arc2:A1->A2->A3->A4->A5->A6->Loss2,其中两个层中的A1到A4具有相同的名称,A5和A6是新的层。我想以较低的学习速度慢慢训练整个架构Arc2,但希望从以前训练过的架构Arc1恢复A1 to A4。我在tensorflow中尝试了实现,但是我得到了错误:

tensorflow/core/framework/op_kernel.cc:1152] Not found: Key Arc/new_layers/A5_weights not found in checkpoint
         [[Node: save/RestoreV2_38 = RestoreV2[dtypes=[DT_FLOAT], _device="/job:localhost/replica:0/task:0/cpu:0"](_recv_save/Const_0, save/RestoreV2_38/tensor_names, save/RestoreV2_38/shape_and_slices)]]

对应于新图层的权重确实不在旧检查点中,但由于这是一种标准技术,这样做的方法是什么?据我所知,冻结网络并不能解决这个问题,因为我希望渐变能够一直传播到A1(同时以较低的学习速度学习)。

这是一种训练新的softmax图层的标准技术,但是如果您有2个或更多新的完全连接的图层或其他图层,它是否真的有问题呢?

1 个答案:

答案 0 :(得分:1)

假设您正在使用tf.train.Saver恢复变量,您需要在构造函数(__init__)中指定要恢复的变量,否则它将默认为当前图形中的所有变量。< / p>

saver = tf.train.Saver(old_vars)
with tf.Session() as sess:
    sess.run(tf.variables_initializer(new_vars)
    saver.restore(sess, save_path)