在之前的博客中提到了使用tensorflow的C++接口調用已經訓練好的模型pb文件,這一篇簡單說下獲取圖模型每一層的名稱,雖然不一定有用。
前面就知道在tensorflow的C++接口中,用GraphDef來定義一個圖模型的類,然後通過ReadBinaryProto()函數來從pb文件中加載圖模型結構,這個時候,模型的每一層在GraphDef中就是一個結點(node),所以有多少層(結點)可以用成員函數node_size()來獲取,然後第i層(結點)通過成員函數node(int)來獲取,再然後名字當然是成員函數name()啦,name()返回的是一個const std::string的字符串,通過它可以知道層的名字,有什麼用呢,可以通過名字來獲取層的輸出的張量(前面就是通過名字來獲取模型的輸入和輸出層,進而獲取模型對輸入張量的的輸出)。
代碼如下:
Status status_load = ReadBinaryProto(Env::Default(), model_path, &graphdef);
if (!status_load.ok())
{
cout << "ERROR: Loading model failed..." << model_path << std::endl;
cout << status_load.ToString() << "\n";
system("pause");
return -1;
}
for (int i=0; i < graphdef.node_size(); i++)
{
std::string name = graphdef.node(i).name();
std::cout << name << std::endl;
}
好了,這樣就可以輸出加載的模型的每一層的名字。
月亮陪着我走回家。
-- 顧城
我想把她帶到將來的日子裏去。
一路靜悄悄……