代码之家  ›  专栏  ›  技术社区  ›  empty Debilski

TensorFlow:NotFoundError:Key未在检查点中找到

  •  9
  • empty Debilski  · 技术社区  · 9 年前

    我已经训练了一个张量流模型大约一周了,偶尔会进行微调。

    今天,当我试图微调模型时,我发现了一个错误:

    tensorflow.python.framework.errors_impl.NotFoundError: Key conv_classifier/loss/total_loss/avg not found in checkpoint
     [[Node: save/RestoreV2_37 = RestoreV2[dtypes=[DT_FLOAT], _device="/job:localhost/replica:0/task:0/cpu:0"](_arg_save/Const_0_0, save/RestoreV2_37/tensor_names, save/RestoreV2_37/shape_and_slices)]]
    

    使用inspect\u检查点。py我看到检查点文件现在有两个空层:

    ...
    conv_decode4/ort_weights/Momentum (DT_FLOAT) [7,7,64,64]
    loss/cross_entropy/avg (DT_FLOAT) []
    loss/total_loss/avg (DT_FLOAT) []
    up1/up_filter (DT_FLOAT) [2,2,64,64]
    ...
    

    解决方案:

    以下是mrry的建议,为清晰起见,编辑如下:

    code_to_checkpoint_variable_map = {var.op.name: var for var in tf.global_variables()}
    for code_variable_name, checkpoint_variable_name in {
         "inference/conv_classifier/weight_loss/avg" : "loss/weight_loss/avg",
         "inference/conv_classifier/loss/total_loss/avg" : "loss/total_loss/avg",
         "inference/conv_classifier/loss/cross_entropy/avg": "loss/cross_entropy/avg",
    }.items():
        code_to_checkpoint_variable_map[checkpoint_variable_name] = code_to_checkpoint_variable_map[code_variable_name]
        del code_to_checkpoint_variable_map[code_variable_name]
    
    saver = tf.train.Saver(code_to_checkpoint_variable_map)
    saver.restore(sess, tf.train.latest_checkpoint('./logs'))
    
    1 回复  |  直到 9 年前
        1
  •  7
  •   mrry    9 年前

    幸运的是,你的检查点看起来不像 ,但程序中的一些变量已重命名。我假设名为 "loss/total_loss/avg" 应还原为名为 "conv_classifier/loss/total_loss/avg" . 您可以通过传递一个自定义 var_list 当您创建 tf.train.Saver .

    name_to_var_map = {var.op.name: var for var in tf.global_variables()}
    
    name_to_var_map["loss/total_loss/avg"] = name_to_var_map[
        "conv_classifier/loss/total_loss/avg"]
    del name_to_var_map["conv_classifier/loss/total_loss/avg"]
    
    # Depending on how the names have changed, you may also need to do:
    # name_to_var_map["loss/cross_entropy/avg"] = name_to_var_map[
    #     "conv_classifier/loss/cross_entropy/avg"]
    # del name_to_var_map["conv_classifier/loss/cross_entropy/avg"]
    
    saver = tf.train.Saver(name_to_var_map)
    

    saver.restore() 恢复模型。或者,您可以使用这种方法来恢复模型和构建的默认值 以规范格式保存。

    推荐文章