2017-06-13 192 views

回答

6
  • 的.ckpt文件是saver.save(sess)舊版本的輸出,這是相當於你.ckpt-data(見下文)

  • 的「檢查點」文件只是在這裏告訴一些TF功能,這是最新的檢查點文件。

  • .ckpt-meta包含元圖,即您的計算圖的結構,沒有變量的值(基本上可以在張量板/圖中看到的)。

  • .ckpt-data包含所有變量的值,沒有結構。要恢復Python中的模型,你通常會使用與元和數據文件(但你也可以使用.pb文件):

    saver = tf.train.import_meta_graph(path_to_ckpt_meta) 
    saver.restore(sess, path_to_ckpt_data) 
    
  • 我不知道確切的.ckpt-index,我想這是一些在內部需要一種索引來正確映射前兩個文件。無論如何,這通常不是必需的,您可以僅使用.ckpt-meta.ckpt-data恢復模型。

  • .pb文件可以保存你的整個圖形(元+數據)。要在C++中加載和使用(但不是訓練)圖形,通常會使用它,使用freeze_graph創建,它將從元數據和數據創建.pb文件。小心,(至少在以前的TF版本和某些人)freeze_graph提供的py函數無法正常工作,所以你必須使用腳本版本。 Tensorflow還提供了一個tf.train.Saver.to_proto()方法,但我不知道它究竟做了什麼。

這裏有很多關於如何保存和恢復圖形的問題。例如,請參閱答案here,但請注意,這兩個引用的教程儘管非常有幫助,但並不完美,許多人似乎仍然很難用C++導入模型。

編輯: 它看起來像you can also use the .ckpt files in c++ now,,所以我想你不一定需要.pb文件了。

+0

非常感謝。現在,如果我想加載.ckpt-meta和.ckpt-data文件來識別圖片的類,您是否知道如何實現這一點?或者你對此有所瞭解? –

+0

你可以看看這裏的問題和答案:https://stackoverflow.com/a/43909969/7456923 這個想法是使用'saver = tf.train。import_meta_graph(path_to_ckpt_meta) saver.restore(sess,path_to_ckpt_data)''然後使用集合或變量名稱取回重要輸入和輸出張量的句柄,然後運行推理,就像沒有保存和加載一樣sthg像'sess.run([prediction_class],feed_dict = {x_input:data})' – gdelab

+0

好的,我會試試看。非常感謝你。 –

0

您可以檢查classify_img_arg.py文件here。我認爲這是很好的解釋

+0

如果鏈接改變,你應該包括一個解釋。 – nkr

+0

基本上,存儲庫只是一個腳本(classify_img_arg.py),它加載一個已保存的訓練模型(ckpt + data),連接CNN圖形的輸入層並將批量圖像加載到其中以進行推理 –

相關問題