我正在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. 保存和恢復視圖狀態android
- 2. 在MacOs上保存和恢復狀態
- 3. 如何在iOS中保存/恢復視圖狀態?
- 4. 在C中保存和恢復TreeView狀態#
- 5. 我們如何在RaphaelJS中保存和恢復轉換狀態
- 6. 保存和恢復活動狀態?
- 7. CoreBluetooth:測試狀態保存和恢復
- 8. 如何保存KineticJS的狀態並將其恢復
- 9. Tensorflow:保存和恢復模型參數
- 10. 保存和恢復使用tensorflow
- 11. 如何通過webMethod在jqGrid中保存/恢復CheckBox狀態?
- 12. 如何保存/恢復狀態視圖片上標籤更改
- 13. 恢復在tensorflow變量沒有指定其形狀
- 14. 如何觸發核藍牙狀態保存和恢復
- 15. 如何保存和恢復audiounit的狀態作爲audiounit主機
- 16. 如何使用保存的實例狀態和恢復實例狀態?
- 17. TensorFlow - 恢復(如果存在)
- 18. 應用程序狀態保存/恢復
- 19. android webview的保存/恢復狀態
- 20. 無法恢復保存的Virtualbox狀態
- 21. 保存/恢復PHP的rand狀態()
- 22. 保存並恢復vim狀態
- 23. 如何在TabChange中保存/恢復片段中的視圖狀態
- 24. android阻止視圖恢復其狀態
- 25. 保存和恢復OpenLayers中的幾何圖形
- 26. 我可以保存回髮狀態並將其恢復嗎?
- 27. 刪除在狀態保存和恢復期間保存的數據
- 28. 恢復對象狀態保存 - 目標c
- 29. 保存WebView狀態並在ANDROID中恢復
- 30. 在Angular中保存/恢復路由器狀態
偉大的建議!我必須從一個字符串的末尾刪除「: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