tensorflow Cpp獲取網絡每一層的名字

在之前的博客中提到了使用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;
}

好了,這樣就可以輸出加載的模型的每一層的名字。

 

月亮陪着我走回家。
我想把她帶到將來的日子裏去。
一路靜悄悄……

 -- 顧城

 

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