第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

如何從給定模型中獲取 Graph(或 GraphDef)?

如何從給定模型中獲取 Graph(或 GraphDef)?

qq_花開(kāi)花謝_0 2023-04-18 17:15:55
我有一個(gè)使用 Tensorflow 2 和 Keras 定義的大模型。該模型在 Python 中運(yùn)行良好?,F(xiàn)在,我想將它導(dǎo)入到 C++ 項(xiàng)目中。在我的 C++ 項(xiàng)目中,我使用TF_GraphImportGraphDef函數(shù)。*.pb如果我使用以下代碼準(zhǔn)備文件,效果很好:    with open('load_model.pb', 'wb') as f:         f.write(tf.compat.v1.get_default_graph().as_graph_def().SerializeToString())我已經(jīng)在使用 Tensorflow 1(使用 tf.compat.v1.* 函數(shù))編寫(xiě)的簡(jiǎn)單網(wǎng)絡(luò)上嘗試了這段代碼。它運(yùn)作良好。現(xiàn)在我想將我的大模型(開(kāi)頭提到的,使用Tensorflow 2編寫(xiě))導(dǎo)出到C++項(xiàng)目中。為此,我需要從我的模型中獲取一個(gè)Graph或GraphDef對(duì)象。問(wèn)題是:如何做到這一點(diǎn)?我沒(méi)有找到任何屬性或函數(shù)來(lái)獲取它。我也試過(guò)用它tf.saved_model.save(model, 'model')來(lái)保存整個(gè)模型。它生成一個(gè)包含不同文件的目錄,包括saved_model.pb文件。不幸的是,當(dāng)我嘗試使用TF_GraphImportGraphDef函數(shù)在 C++ 中加載此文件時(shí),程序拋出異常。
查看完整描述

2 回答

?
海綿寶寶撒

TA貢獻(xiàn)1809條經(jīng)驗(yàn) 獲得超8個(gè)贊

生成的協(xié)議緩沖區(qū)文件tf.saved_model.save不包含GraphDef消息,而是包含一個(gè)SavedModel.?您可以在 Python 中遍歷它SavedModel以獲取其中的嵌入圖,但這不會(huì)立即用作凍結(jié)圖,因此正確處理它可能很困難。取而代之的是,C++ API 現(xiàn)在包含一個(gè)LoadSavedModel調(diào)用,允許您從目錄加載整個(gè)保存的模型。它應(yīng)該看起來(lái)像這樣:

#include <iostream>

#include <...>? // Add necessary TF include directives


using namespace std;

using namespace tensorflow;


int main()

{

? ? // Path to saved model directory

? ? const string export_dir = "...";

? ? // Load model

? ? Status s;

? ? SavedModelBundle bundle;

? ? SessionOptions session_options;

? ? RunOptions run_options;

? ? s = LoadSavedModel(session_options, run_options, export_dir,

? ? ? ? ? ? ? ? ? ? ? ?// default "serve" tag set by tf.saved_model.save

? ? ? ? ? ? ? ? ? ? ? ?{"serve"}, &bundle));

? ? if (!.ok())

? ? {

? ? ? ? cerr << "Could not load model: " << s.error_message() << endl;

? ? ? ? return -1;

? ? }

? ? // Model is loaded

? ? // ...

? ? return 0;

}

從這里開(kāi)始,您可以做不同的事情。也許您最愿意使用 將保存的模型轉(zhuǎn)換為凍結(jié)圖FreezeSavedModel,這應(yīng)該讓您可以像以前一樣做事:


GraphDef frozen_graph_def;

std::unordered_set<string> inputs;

std::unordered_set<string> outputs;

s = FreezeSavedModel(bundle, &frozen_graph_def,

? ? ? ? ? ? ? ? ? ? ?&inputs, &outputs));

if (!s.ok())

{

? ? cerr << "Could not freeze model: " << s.error_message() << endl;

? ? return -1;

}

否則,您可以直接使用保存的模型對(duì)象:


// Default "serving_default" signature name set by tf.saved_model_save

const SignatureDef& signature_def = bundle.GetSignatures().at("serving_default");

// Get input and output names (different from layer names)

// Key is input and output layer names

const string input_name = signature_def.inputs().at("my_input").name();

const string output_name = signature_def.inputs().at("my_output").name();

// Run model

Tensor input = ...;

std::vector<Tensor> outputs;

s = bundle.session->Run({{input_name, input}}, {output_name}, {}, &outputs));

if (!s.ok())

{

? ? cerr << "Error running model: " << s.error_message() << endl;

? ? return -1;

}

// Get result

Tensor& output = outputs[0];


查看完整回答
反對(duì) 回復(fù) 2023-04-18
?
寶慕林4294392

TA貢獻(xiàn)2021條經(jīng)驗(yàn) 獲得超8個(gè)贊

我找到了以下問(wèn)題的解決方案:


g = tf.Graph()

with g.as_default():


    # Create model

    inputs = tf.keras.Input(...) 

    x = tf.keras.layers.Conv2D(1, (1,1), padding='same')(inputs)

    # Done creating model


    # Optionally get graph operations

    ops = g.get_operations()

    for op in ops:

        print(op.name, op.type)


    # Save graph

    tf.io.write_graph(g.as_graph_def(), 'path', 'filename.pb', as_text=False)


查看完整回答
反對(duì) 回復(fù) 2023-04-18
  • 2 回答
  • 0 關(guān)注
  • 182 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)