Tensorflow:使用附加层微调模型,键未找到错误

Tensorflow:使用附加层微调模型,键未找到错误,tensorflow,neural-network,deep-learning,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到A4。我尝试了tensorflow中的实现,但出现了错误: tensorflow/core/framework/op_ke

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

我有一个新的架构Arc2:
A1->A2->A3->A4->A5->A6->Loss2
,其中两个层中的A1到A4具有相同的名称,A5和A6是新层。我希望以较低的学习率缓慢地训练整个架构Arc2,但希望从先前训练的架构Arc1恢复
A1到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个或更多新的完全连接层或其他层,那么这是否真的有问题?

假设您使用还原变量,则需要在构造函数()中指定要还原的变量,否则,它将默认为当前图形中的所有变量

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