我正在C++中使用TensorFlow來訓練我的模型。 Python僅用於構建圖形。那麼是否有一種方法可以純粹用C++來保存和恢復圖形及其狀態?我知道Python類tf.train.Saver
,但據我瞭解,它不存在於C++中。如何在C++中保存和恢復TensorFlow圖形及其狀態?
2
A
回答
7
的tf.train.Saver
類目前只存在於Python中,但(i)其是從,你可以從C++運行TensorFlow OPS內置,及(ii)其公開Saver.as_saver_def()
方法,可以讓你得到一個SaverDef
protocol buffer與名稱您必須運行以保存或恢復模型。
在Python中,你可以得到保存和恢復OPS的名稱如下:
saver = tf.train.Saver(...)
saver_def = saver.as_saver_def()
# The name of the tensor you must feed with a filename when saving/restoring.
print saver_def.filename_tensor_name
# The name of the target operation you must run when restoring.
print saver_def.restore_op_name
# The name of the target operation you must run when saving.
print saver_def.save_tensor_name
在C++中,從檢查點恢復,你叫Session::Run()
,在檢查點文件爲saver_def.filename_tensor_name
名餵養,目標操作爲saver_def.restore_op_name
。要保存另一個檢查點,請撥打Session::Run()
,再次輸入檢查點文件的名稱saver_def.filename_tensor_name
,並獲取saver_def.save_tensor_name
的值。
2
最近的TensorFlow版本包含一些輔助函數,可以在沒有Python的情況下在C++中執行相同的操作。這些是由ProtoBuf在pip-package(${HOME}/.local/lib/python2.7/site-packages/tensorflow/include/tensorflow/core/protobuf/saver.pb.h
)中生成的。
// save
tensorflow::Tensor checkpointPathTensor(tensorflow::DT_STRING, tensorflow::TensorShape());
checkpointPathTensor.scalar<std::string>()() = "some/path";
tensor_dict feed_dict = {{graph_def.saver_def().filename_tensor_name(), checkpointPathTensor}};
status = sess->Run(feed_dict, {}, {graph_def.saver_def().save_tensor_name()}, nullptr);
// restore
tensorflow::Tensor checkpointPathTensor(tensorflow::DT_STRING, tensorflow::TensorShape());
checkpointPathTensor.scalar<std::string>()() = "some/path";
tensor_dict feed_dict = {{graph_def.saver_def().filename_tensor_name(), checkpointPathTensor}};
status = sess->Run(feed_dict, {}, {graph_def.saver_def().restore_op_name()}, nullptr);
這是基於恢復模型
def restore(sess, metaGraph, fn):
restore_op_name = metaGraph.as_saver_def().restore_op_name # u'save/restore_all'
restore_op = tf.get_default_graph().get_operation_by_name(restore_op_name)
filename_tensor_name = metaGraph.as_saver_def().filename_tensor_name # u'save/Const'
sess.run(restore_op, {filename_tensor_name: fn})
對於工作和完整version see here的無證蟒蛇路(more details)。
相關問題
- 1. 如何保存和恢復Webview狀態?
- 2. 保存和恢復視圖狀態android
- 3. 在MacOs上保存和恢復狀態
- 4. 如何在iOS中保存/恢復視圖狀態?
- 5. 在C中保存和恢復TreeView狀態#
- 6. JSF保存/恢復視圖狀態
- 7. 我們如何在RaphaelJS中保存和恢復轉換狀態
- 8. 如何在android中保存和恢復FragmentPagerAdapter狀態?
- 9. 如何在Android中保存和恢復ExpandableListView的狀態?
- 10. CoreBluetooth:測試狀態保存和恢復
- 11. 保存和恢復活動狀態?
- 12. 狀態保存和恢復問題
- 13. Android上的狀態保存和恢復?
- 14. 保存頁面狀態並將其恢復到相同狀態
- 15. 如何保存KineticJS的狀態並將其恢復
- 16. 如何管理iOS中的狀態保存和恢復5
- 17. 如何理解TensorFlow中的靜態形狀和動態形狀?
- 18. Tensorflow:保存和恢復模型參數
- 19. Tensorflow - 保存和恢復模型
- 20. 保存和恢復使用tensorflow
- 21. 恢復在tensorflow變量沒有指定其形狀
- 22. 如何通過webMethod在jqGrid中保存/恢復CheckBox狀態?
- 23. 如何在Datatables中恢復/加載DB保存的狀態?
- 24. 如何保存/恢復狀態視圖片上標籤更改
- 25. 如何保存和恢復audiounit的狀態作爲audiounit主機
- 26. 如何觸發核藍牙狀態保存和恢復
- 27. TensorFlow - 恢復(如果存在)
- 28. 在viewpager中保存和恢復碎片狀態
- 29. 在viewpager循環中恢復片段及其狀態
- 30. 如何使用保存的實例狀態和恢復實例狀態?
偉大的建議!我必須從一個字符串的末尾刪除「:0」。另外,在恢復模型期間,相對路徑不起作用。 Tensorcreation:'tf :: Tensor string(tf :: DT_STRING,tf :: TensorShape({1,1}));' Feeding string:'string.matrix()(0,0)= file_path_ + filename;' 執行:'TF_CHECK_OK(session_-> Run({{「save/Const:0」,string}},{},{「save/control_dependency」},nullptr));' –
Trevir
@Trevir, mrry:可以請你張貼摘錄嗎?我對tensorflow很陌生,文檔也沒有幫助..我會非常感激你! –
@Surferonthefall:前評論有所有必要的代碼。使用python腳本獲取正確的操作名稱,例如「保存/常數:0」。之後,你可以通過session-> run方法在C++中使用操作名稱。 – Trevir