2017-08-27 37 views
0

所以,我有一个架构,其中比方说,我有几层,让我们通过ARC1表示它:A1->A2->A3->A4->Loss1。我用一个损失函数来训练这个架构:Loss1。Tensorflow:微调与附加层的模型,关键不是发现错误

我有一个新的架构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

假设你正在恢复使用tf.train.Saver,你需要指定要在构造函数(__init__)恢复变量变量,否则会默认为所有变量在当前图形。

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