日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++中用frugally-deep调用keras的模型并进行预测

發布時間:2024/7/23 c/c++ 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++中用frugally-deep调用keras的模型并进行预测 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1、背景

Python語言中的Keras庫搭建深度學習模型非常便捷,但有時需要在 C++ 中調用訓練好的模型,得到測試集的結果。比如將模型部署于FPGA,中間的一個步驟則需要用C++構建模型。但 Keras庫沒有提供 C++ API,其中一種解決方法是使用 TensorFlow 的 C++ API,但編譯過程非常繁瑣,難以成功,而另一種方法,如果不是必須要使用 GPU,frugally-deep是一個不錯的選擇。

2、介紹

frugally-deep是一個用C++實現的庫,只依賴于三個頭文件庫 FunctionalPlus、Eigen、json,它可以將 Keras 保存的 .h5 文件直接轉為 C++ 中可調用的 .json 文件,同時它也是線程安全的,可以很方便的在多 CPU 上進行前向傳播。

3、準備工作

(1)支持 C++14 的編譯器:Visual Studio 2019

(2)python版本在 3.7 或以上,TensorFlow 2.1.1(可使用pip install TensorFlow下載 )

(3)下載源碼:分別前往frugally-deep, FunctionalPlus , Eigen 和 json 點擊右側的 Code,再點擊 Download ZIP 下載這些源碼,

  • frugally-deep:https://github.com/Dobiasd/frugally-deep
  • FunctionalPlus :https://github.com/Dobiasd/FunctionalPlus
  • Eigen :https://gitlab.com/libeigen/eigen#
  • Json:https://github.com/nlohmann/json
  • (4)也可以直接到該網盤連接下載:

    鏈接:https://pan.baidu.com/s/1HX_tPZxmOhr2BHCwu9Mp8A

    提取碼:1x7e

    4、使用過程:以下過程是在以上工作準備就緒后進行

    (1)在 Python 中訓練好模型后,model.save('....h5', include_optimizer=False) 保存模型,比如frugally-deep 主頁上的例子。創建create_model.py,運行 create_model.py 后,當前目錄下生成了 keras_model.h5

    # create_model.pyimport numpy as npfrom tensorflow.keras.layers import Input, Densefrom tensorflow.keras.models import Modelinputs = Input(shape=(4,))x = Dense(5, activation='relu')(inputs)predictions = Dense(3, activation='softmax')(x)model = Model(inputs=inputs, outputs=predictions)model.compile(loss='categorical_crossentropy', optimizer='nadam')model.fit(np.asarray([[1, 2, 3, 4], [2, 3, 4, 5]]),np.asarray([[1, 0, 0], [0, 0, 1]]), epochs=10)model.save('keras_model.h5', include_optimizer=False)

    (2)解壓frugally-deep、FunctionalPlus、Eigen、json,將frugally-deep-master文件夾下的keras_export文件復制到create_model.py同一個目錄下

    (3)打開cmd命令窗口(linux系統打開一個終端),使用命令“python keras_export/convert_model.py keras_model.h5 keras_model.json”將模型的.h文件轉為c++可直接調用的.json文件,執行命令后同一個目錄下出現keras_model.json文件。

    ? ? ? ?轉換過程中,frugally-deep 會自動對模型進行測試,驗證相同的輸入下,模型在 Python 和 C++ 中的輸出是否相同。若輸出不同會直接報錯,則不必擔心轉換出錯。

    (4)用vs創建一個空共項目,在項目中創建一個main.cpp文件,在main.cpp文件所在的項目文件夾中創建一個include文件夾。

    ? ? ? ? 將 frugally-deep-master文件夾中的include 文件夾中的fdeep文件夾、FunctionalPlus-master文件夾中的include 文件夾中的 fplus 文件夾、將 json-develop 文件夾中的include 文件夾中的nlohmann 文件夾、eigen-master文件夾中的Eigen 文件夾復制到剛創建的include空文件夾內。

    // main.cpp#include <fdeep/fdeep.hpp>int main(){const auto model = fdeep::load_model("fdeep_model.json");const auto result = model.predict({fdeep::tensor(fdeep::tensor_shape(static_cast<std::size_t>(4)),{1, 2, 3, 4})});std::cout << fdeep::show_tensors(result) << std::endl;}

    (5)在VS創建的項目中,右鍵點擊“解決方案資源管理器”中的項目名稱,選擇屬性 -> 配置屬性 -> C/C++ -> 常規,在右側的附加包含目錄中填上 $(ProjectDir)include; 若使用的是 gcc 編譯器,要在編譯時加上參數 -Iinclude。

    (6)運行main.cpp,輸出:

    5、注意點

    如果要預測多個tensor的值,可增加一個循環,如下示例,內部的兩層循環是給tensor賦值,最外層循環是控制多個tensor的預測

    6、參考網址:該作者已經寫的很詳細了,學習后,結合自己的項目模型重新理解的寫了一下

    在 C++ 中調用 keras | iqhy's Blog

    C++中用frugally-deep讀取keras的模型并進行預測(詳細)_1037號森林里一段干木頭的博客-CSDN博客

    總結

    以上是生活随笔為你收集整理的C++中用frugally-deep调用keras的模型并进行预测的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。