RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何用C++創(chuàng)建簡單的生成式AI模型

CHANBAEK ? 來源:網(wǎng)絡(luò)整理 ? 2024-07-05 17:53 ? 次閱讀

生成式 AI 概述

生成式AI(Generative AI)是一種人工智能技術(shù),它通過機(jī)器學(xué)習(xí)模型和深度學(xué)習(xí)技術(shù),從大量歷史數(shù)據(jù)中學(xué)習(xí)對象的特征和規(guī)律,從而能夠生成全新的、完全原創(chuàng)的內(nèi)容,包括文本、圖像、音頻視頻等。與傳統(tǒng)的基于規(guī)則或模板的生成方法不同,生成式AI能夠自主創(chuàng)造內(nèi)容,類似于人類的創(chuàng)作過程。

生成式AI的核心在于其能夠捕捉數(shù)據(jù)的內(nèi)在結(jié)構(gòu)和模式,并據(jù)此生成新的數(shù)據(jù)實例。這種能力依賴于復(fù)雜的模型架構(gòu)和大量的訓(xùn)練數(shù)據(jù)。例如,自然語言處理領(lǐng)域的生成式AI模型如GPT-3,能夠生成高質(zhì)量的自然語言文本,用于聊天、寫作、自動化客服等多種場景。在圖像生成領(lǐng)域,生成對抗網(wǎng)絡(luò)(GANs)則是最具代表性的模型之一,它能夠生成逼真的圖像和視頻。

生成式 AI 的應(yīng)用

生成式AI的應(yīng)用范圍非常廣泛,包括但不限于以下幾個方面:

  1. 內(nèi)容創(chuàng)作 :自動生成文章、詩歌、小說等文學(xué)作品,以及新聞稿、廣告文案等商業(yè)內(nèi)容。
  2. 圖像和視頻生成 :生成逼真的圖像、視頻和動畫,用于娛樂、廣告、電影制作等領(lǐng)域。
  3. 輔助設(shè)計 :在建筑、時尚、工業(yè)設(shè)計等領(lǐng)域,生成式AI可以輔助設(shè)計師快速生成設(shè)計方案和草圖。
  4. 信息檢索 :通過生成式問答系統(tǒng),提供基于自然語言的問題解答,提升用戶體驗。
  5. 語音合成 :將文本轉(zhuǎn)換為逼真的語音,應(yīng)用于虛擬助理、有聲讀物等領(lǐng)域。

如何用 C++ 創(chuàng)建簡單的生成式 AI 模型

雖然C++不是構(gòu)建和訓(xùn)練復(fù)雜深度學(xué)習(xí)模型的首選語言(因為缺乏Python等語言提供的豐富庫和工具),但可以使用C++來調(diào)用或封裝在其他框架(如TensorFlow、PyTorch)中訓(xùn)練的模型,或者使用特定的C++機(jī)器學(xué)習(xí)庫(如MLPack、DLib)來構(gòu)建簡單的機(jī)器學(xué)習(xí)模型。

下面,我們將通過一個簡單的例子,展示如何使用C++加載和運行一個已經(jīng)訓(xùn)練好的生成式AI模型。這里假設(shè)我們有一個基于TensorFlow的已訓(xùn)練模型,并希望在C++環(huán)境中進(jìn)行推理。

步驟 1: 準(zhǔn)備已訓(xùn)練模型

首先,你需要在Python環(huán)境中使用TensorFlow訓(xùn)練一個生成式AI模型,并將其保存為TensorFlow SavedModel格式。這個模型可以是任何類型的生成式模型,比如一個用于生成文本或圖像的模型。

步驟 2: 在 C++ 中加載模型

接下來,在C++環(huán)境中,你需要使用TensorFlow C++ API來加載這個模型。以下是一個簡化的示例代碼,展示了如何加載和運行一個SavedModel。

#include < tensorflow/core/public/session.h >  
#include < tensorflow/core/platform/env.h >  
#include < iostream >  
#include < string >  
#include < vector >  
  
int main() {  
    // 指定模型的路徑  
    std::string export_dir = "/path/to/your/saved_model";  
  
    // 創(chuàng)建一個Session選項  
    tensorflow::SessionOptions sess_options;  
  
    // 創(chuàng)建一個新的Session  
    std::unique_ptr< tensorflow::Session > session(tensorflow::NewSession(sess_options));  
  
    // 準(zhǔn)備輸入數(shù)據(jù)(這里只是一個示例,你需要根據(jù)你的模型輸入來準(zhǔn)備數(shù)據(jù))  
    std::vector< tensorflow::Tensor > inputs;  
    // 假設(shè)你的模型有一個名為"input_tensor"的輸入張量,并且你需要傳遞一個float類型的向量  
    tensorflow::Tensor input_tensor(tensorflow::DT_FLOAT, tensorflow::TensorShape({1, 10}));  
    // 假設(shè)輸入形狀為[1, 10]  
    auto input_tensor_mapped = input_tensor.tensor< float, 2 >();  
  
    // 填充輸入數(shù)據(jù)(這里只是示例數(shù)據(jù))  
    for (int i = 0; i < 1; ++i) {  
        for (int j = 0; j < 10; ++j) {  
            input_tensor_mapped(i, j) = i + j;  
        }  
    }  
    inputs.push_back(input_tensor);  
  
    // 準(zhǔn)備輸出張量的名稱(你需要根據(jù)你的模型輸出來指定)  
    std::vector< std::string > output_tensor_names = {"output_tensor"};  
    // 假設(shè)輸出張量名為"output_tensor"  
  
    // 運行Session  
    std::vector< tensorflow::Tensor > outputs;  
    tensorflow::RunOptions run_options;  
    tensorflow::Status status = session- >Run(  
        /* 運行的圖 */{},   
        /* 輸入張量 */{{"input_tensor", inputs[0]}},  
        /* 輸出張量 */output_tensor_names,   
        /* 目標(biāo)節(jié)點(對于推理來說通常不需要) */{},
&outputs,
&run_options);
if (!status.ok()) {  
    std::cerr < < "Running model failed: " < < status.ToString() < < std::endl;  
    return -1;  
}  

// 輸出結(jié)果  
// 假設(shè)輸出是一個float類型的張量,并且我們知道其形狀  
if (!outputs.empty()) {  
    const tensorflow::Tensor& output_tensor = outputs[0];  
    auto output_tensor_mapped = output_tensor.tensor< float, 2 >();  

    // 假設(shè)輸出形狀為[1, n],其中n是生成的元素數(shù)量  
    int n = output_tensor.shape().dim_size(1);  
    std::cout < < "Generated Output:" < < std::endl;  
    for (int j = 0; j < n; ++j) {  
        std::cout < < output_tensor_mapped(0, j) < < " ";  
    }  
    std::cout < < std::endl;  
}  

return 0;
}

// 注意:上面的代碼是一個高度簡化的示例,用于展示如何在C++中加載和運行TensorFlow SavedModel。
// 在實際應(yīng)用中,你需要根據(jù)模型的具體輸入輸出調(diào)整代碼,并且處理更復(fù)雜的數(shù)據(jù)結(jié)構(gòu)和錯誤情況。

// 編譯和運行
// 要編譯上面的代碼,你需要有TensorFlow C++ API的庫文件。這通常涉及到下載TensorFlow源代碼并編譯它,或者使用預(yù)編譯的庫。
// 編譯命令可能類似于(具體取決于你的系統(tǒng)和TensorFlow版本):
// g++ -std=c++11 -o run_model run_model.cpp -I/path/to/tensorflow/include -L/path/to/tensorflow/lib -ltensorflow_cc -ltensorflow_framework

// 運行編譯后的程序:
// ./run_model

深入討論

挑戰(zhàn)與限制

  • 復(fù)雜性 :C++相比于Python等語言,在編寫深度學(xué)習(xí)模型時更為復(fù)雜和低效。C++缺乏Python那樣的高級抽象和豐富的庫支持,因此需要更多的手動工作來管理內(nèi)存、處理數(shù)據(jù)類型和調(diào)用API。
  • 生態(tài)系統(tǒng) :雖然TensorFlow提供了C++ API,但其C++生態(tài)系統(tǒng)相比于Python來說還不夠成熟和廣泛。這意味著你可能會遇到較少的教程、示例和社區(qū)支持。
  • 性能 :盡管C++通常用于追求高性能,但在深度學(xué)習(xí)領(lǐng)域,Python的庫(如NumPy和PyTorch)經(jīng)過高度優(yōu)化,可以提供接近或達(dá)到C++的性能。此外,Python的靈活性也使其更適合于快速原型設(shè)計和實驗。

替代方案

  • Python 封裝 :如果你更熟悉Python,并且你的項目允許,可以考慮在Python中訓(xùn)練模型,并將其封裝為服務(wù)或使用其他語言(如C++)的庫來調(diào)用。
  • 使用其他C++庫 :除了TensorFlow,還有其他一些C++機(jī)器學(xué)習(xí)庫(如MLPack、DLib)也支持簡單的機(jī)器學(xué)習(xí)模型。這些庫可能更適合于那些不需要深度學(xué)習(xí)或只需要簡單模型的項目。
  • 跨語言接口 :你可以使用如gRPC或ZeroMQ這樣的跨語言通信框架,在Python中運行深度學(xué)習(xí)模型,并通過網(wǎng)絡(luò)接口與C++應(yīng)用程序進(jìn)行交互。

結(jié)論

生成式AI是一個強(qiáng)大的工具,能夠生成全新的、高質(zhì)量的內(nèi)容。盡管C++不是構(gòu)建和訓(xùn)練復(fù)雜生成式AI模型的首選語言,但它仍然可以在模型推理和部署階段發(fā)揮重要作用。通過結(jié)合使用C++和Python(或其他高級語言),你可以充分利用兩種語言的優(yōu)點,構(gòu)建出既高效又靈活的生成式AI應(yīng)用。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 人工智能
    +關(guān)注

    關(guān)注

    1791

    文章

    47183

    瀏覽量

    238235
  • C++
    C++
    +關(guān)注

    關(guān)注

    22

    文章

    2108

    瀏覽量

    73618
  • 生成式AI
    +關(guān)注

    關(guān)注

    0

    文章

    502

    瀏覽量

    471
收藏 人收藏

    評論

    相關(guān)推薦

    AI作畫大受追捧,生成AI技術(shù)的機(jī)會與挑戰(zhàn)!

    的特征,不是簡單的重復(fù)。 生成AI的關(guān)鍵技術(shù)是生成對抗網(wǎng)絡(luò)(GANs, Generative
    的頭像 發(fā)表于 10-17 08:15 ?2569次閱讀

    NVIDIA AI Foundry 為全球企業(yè)打造自定義 Llama 3.1 生成 AI 模型

    Foundry 提供從數(shù)據(jù)策管、合成數(shù)據(jù)生成、微調(diào)、檢索、防護(hù)到評估的全方位生成 AI 模型服務(wù),以便部署自定義 Llama 3.1 N
    發(fā)表于 07-24 09:39 ?706次閱讀
    NVIDIA <b class='flag-5'>AI</b> Foundry 為全球企業(yè)打造自定義 Llama 3.1 <b class='flag-5'>生成</b><b class='flag-5'>式</b> <b class='flag-5'>AI</b> <b class='flag-5'>模型</b>

    使用CUBEAI部署tflite模型到STM32F0中,模型創(chuàng)建失敗怎么解決?

    看到CUBE_AI已經(jīng)支持到STM32F0系列芯片,就想拿來入門嵌入AI。 生成模型很小,是可以部署到F0上的,但是一直無法
    發(fā)表于 03-15 08:10

    何用STM32CubeMX生成底層代碼?代碼中C++的編寫要注意哪些事項?

    何用STM32CubeMX生成底層代碼?單片機(jī)代碼如何進(jìn)行IDE的C++配置?代碼中C++的編寫要注意哪些事項?C++實現(xiàn)時候遇到的情況有
    發(fā)表于 07-01 06:22

    C語言應(yīng)用】如何用C代碼生成一維碼?

    C語言應(yīng)用】如何用C代碼生成一維碼?
    的頭像 發(fā)表于 08-25 12:42 ?2435次閱讀
    【<b class='flag-5'>C</b>語言應(yīng)用】如<b class='flag-5'>何用</b><b class='flag-5'>C</b>代碼<b class='flag-5'>生成</b>一維碼?

    C++創(chuàng)建鏈表并輸出

    使用C++代碼創(chuàng)建一個鏈表并輸出。
    的頭像 發(fā)表于 01-10 15:05 ?1179次閱讀

    NVIDIA 為全球企業(yè)帶來生成 AI 推出用于創(chuàng)建大型語言模型和視覺模型的云服務(wù)

    和運行自定義大型語言模型生成AI模型,這些模型專為企業(yè)所在領(lǐng)域的特定任務(wù)而
    發(fā)表于 03-22 13:45 ?392次閱讀
    NVIDIA 為全球企業(yè)帶來<b class='flag-5'>生成</b><b class='flag-5'>式</b> <b class='flag-5'>AI</b>  推出用于<b class='flag-5'>創(chuàng)建</b>大型語言<b class='flag-5'>模型</b>和視覺<b class='flag-5'>模型</b>的云服務(wù)

    GTC23 | NVIDIA 為全球企業(yè)帶來生成 AI,推出用于創(chuàng)建大型語言模型和視覺模型的云服務(wù)

    能夠構(gòu)建、完善和運行自定義大型語言模型生成 AI 模型,這些模型專為企業(yè)所在領(lǐng)域的特定任務(wù)而
    的頭像 發(fā)表于 03-23 06:50 ?523次閱讀

    什么是生成AI生成AI的四大優(yōu)勢

    生成AI是一種特定類型的AI,專注于生成新內(nèi)容,如文本、圖像和音樂。這些系統(tǒng)在大型數(shù)據(jù)集上進(jìn)行訓(xùn)練,并使用機(jī)器學(xué)習(xí)算法
    發(fā)表于 05-29 14:12 ?4526次閱讀

    如何選擇創(chuàng)建c語言和c++

    選擇創(chuàng)建 C 語言和 C++ 都需要綜合考慮多個因素。在決定使用哪種語言之前,我們需要對這兩種語言的特點、優(yōu)缺點、適用場景、學(xué)習(xí)成本等進(jìn)行全面的了解和對比。下面是關(guān)于選擇創(chuàng)建
    的頭像 發(fā)表于 11-27 15:58 ?599次閱讀

    聯(lián)想攜手京東,緊扣大模型生成AI技術(shù)

    聯(lián)想與京東攜手,緊扣大模型生成AI技術(shù)帶來的產(chǎn)業(yè)機(jī)遇,在多個領(lǐng)域展開深入合作。
    的頭像 發(fā)表于 04-12 10:27 ?636次閱讀

    生成 AI 進(jìn)入模型驅(qū)動時代

    隨著ChatGPT和大型語言模型(LLM)呈現(xiàn)爆炸增長,生成人工智能(GenerativeAI)成為近來的一大熱詞。由此引發(fā)了一場爭論:哪種AI
    的頭像 發(fā)表于 04-13 08:12 ?524次閱讀
    <b class='flag-5'>生成</b><b class='flag-5'>式</b> <b class='flag-5'>AI</b> 進(jìn)入<b class='flag-5'>模型</b>驅(qū)動時代

    生成AI與神經(jīng)網(wǎng)絡(luò)模型的區(qū)別和聯(lián)系

    生成AI與神經(jīng)網(wǎng)絡(luò)模型是現(xiàn)代人工智能領(lǐng)域的兩個核心概念,它們在推動技術(shù)進(jìn)步和應(yīng)用拓展方面發(fā)揮著至關(guān)重要的作用。本文將詳細(xì)探討生成
    的頭像 發(fā)表于 07-02 15:03 ?712次閱讀

    三行代碼完成生成AI部署

    OpenVINO2024.2版本跟之前版本最大的不同是OpenVINO2024.2分為兩個安裝包分別是基礎(chǔ)包與生成AI支持包,新發(fā)布的GenAI開發(fā)包支持C++與Python語言接口
    的頭像 發(fā)表于 08-30 16:49 ?410次閱讀
    三行代碼完成<b class='flag-5'>生成</b><b class='flag-5'>式</b><b class='flag-5'>AI</b>部署

    NVIDIA推出全新生成AI模型Fugatto

    NVIDIA 開發(fā)了一個全新的生成 AI 模型。利用輸入的文本和音頻,該模型可以創(chuàng)作出包含任意的音樂、人聲和聲音組合的作品。
    的頭像 發(fā)表于 11-27 11:29 ?326次閱讀
    RM新时代网站-首页