TensorFlow重新導入restore報錯: OP_REQUIRES failed at save_restore_v2_ops.cc:184 : Not found: Key Variable

最近在解決TensorFlow模型重新導入時遇到下面這個問題,發現網上很多解決辦法都在誤導,其實報錯已經很明顯說明問題的根源,只是我們不一定找到問題的根源。報錯顯示 不能在快照中找到 對應的鍵值。

報錯信息: 

tensorflow\tensorflow\core\framework\op_kernel.cc:1318] OP_REQUIRES failed at save_restore_v2_ops.cc:184 : Not found: Key Variable not found in checkpoint
Traceback (most recent call last):

saver.restore(sess, kpt.model_checkpoint_path)
File "D:\Program Files\Develop\Python\Anaconda3\envs\python2\lib\site-packages\tensorflow\python\training\saver.py", line 1802, in restore
{self.saver_def.filename_tensor_name: save_path})
File "D:\Program Files\Develop\Python\Anaconda3\envs\python2\lib\site-packages\tensorflow\python\client\session.py", line 900, in run
run_metadata_ptr)
File "D:\Program Files\Develop\Python\Anaconda3\envs\python2\lib\site-packages\tensorflow\python\client\session.py", line 1135, in _run
feed_dict_tensor, options, run_metadata)
File "D:\Program Files\Develop\Python\Anaconda3\envs\python2\lib\site-packages\tensorflow\python\client\session.py", line 1316, in _do_run
run_metadata)
File "D:\Program Files\Develop\Python\Anaconda3\envs\python2\lib\site-packages\tensorflow\python\client\session.py", line 1335, in _do_call
raise type(e)(node_def, op, message)
tensorflow.python.framework.errors_impl.NotFoundError: <exception str() failed>

 問題分析:報錯顯示 不能在快照中找到 對應的鍵值,說明有地方定義變量出現了問題,可能是路徑出錯了,不能找到文件,也可能是變量問題,在模型中出現未定義變量名,具體問題需要具體分析。

解決辦法:

1.文件路徑錯誤,找不到對應的文件,在使用前添加檢查

    save_dir = r"resource/model/"
    file_path = tf.train.latest_checkpoint(save_dir)  # 獲取最新的模型文件
    kpt = tf.train.get_checkpoint_state(save_dir)  # 檢查獲取可以用的模型文件
    print("kpt=", kpt)
    with tf.Session() as sess:
        sess.run(tf.global_variables_initializer())
        print("file_path:", file_path)
        if kpt is not None:
            saver.restore(sess, kpt.model_checkpoint_path)
            print("x=0.2,z=", sess.run(Z, feed_dict={X: 0.2}))
        else:
            print("模型文件路徑有誤")

2.查看模型裏面的具體信息,詳細查看變量和數據是否一致。

print_tensors_in_checkpoint_file(save_dir + "linermodel.cpkt", None, True, True)

本次是因爲我在存入模型時設置了兩個變量參數,在重新導入時,這個兩個變量沒有對應變量接收導致。在重新導入前設置好兩個變量參數,成功導入模型。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章