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

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

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

如何在TensorFlow2里使用Keras API創(chuàng)建一個自定義CNN網(wǎng)絡?

電子工程師 ? 來源:XILINX技術社區(qū) ? 作者:張超 ? 2021-04-15 11:36 ? 次閱讀

概述

本示例工程中我們會在 TensorFlow2 下使用 Keras API 創(chuàng)建一個自定義 CNN 網(wǎng)絡,在 Vitis-AI 1.3 環(huán)境下編譯成 Xilinx DPU 上運行的模型文件,并在 Xilinx zynqMP 上部署運行。

該示例工程應在 Vitis-AI1.3 Docker,vitis-ai-tensorflow2conda 環(huán)境中運行。

有關Mnist手寫數(shù)字數(shù)據(jù)集,請參見http://yann.lecun.com/exdb/mnist/。

在該例程中我們會演示以下的步驟:

使用 TensorFlow2 訓練和評估小型自定義卷積神經(jīng)網(wǎng)絡

對浮點模型進行量化 (quantization)

對量化模型進行評估

使用校準數(shù)據(jù)集對訓練后的模型進行微調(diào) (finetuning)

編譯量化和微調(diào)的模型,以創(chuàng)建 .xmodel 文件,準備在 DPU 加速器 IP 上執(zhí)行在 zynqMP 評估板上下載并運行該模型

代碼說明

可從下面的 github 頁面獲得源碼。

https://github.com/lobster1989/Mnist-classification-Vitis-AI-1.3-TensorFlow2

Python 及 Shell 腳本源碼說明如下:

load_data.py:下載 Mnist 數(shù)據(jù)集;

generate_images.py:從 Keras 在線數(shù)據(jù)集生成本地圖像文件;

train.py:創(chuàng)建和訓練用于 Mnist 分類的簡單 CNN 模型, 經(jīng)過訓練的浮點模型將被保存到本地;

quantize.py:使用 VitisQuantizer 量化前一個步驟保存的浮點模型,量化后的模型將被保存到本地;

eval_quantized.py:評估量化模型的 accuracy;

finetune.py:利用 Vitis-AI 進行模型微調(diào)(僅作演示,后續(xù)編譯部署的為 quantize 步驟保存的模型);

compile_zcu102.sh/compile_zcu104.sh:啟動 vai_c_tensorflow2 命令以將量化或微調(diào)的模型編譯為供 DPU 運行的 .xmodel 文件。兩個文件分別對應目標為 zcu102 和 zcu104 開發(fā)板;

make_target_zcu102.sh/make_target_zcu104.sh:將.xmodel和圖像復制到 。/target_zcu10x 文件夾中,準備好將其復制到 zcu102/zcu104 評估板的 SD 卡中。

模型創(chuàng)建/量化/編譯

在運行此部分之前,我們應在 Vitis-AI docker 環(huán)境下激活 vitis-ai-tensorflow2anaconda 環(huán)境。有關更多詳細信息,請參閱最新版本的 UG1414。

(vitis-ai-tensorflow2) Vitis-AI /workspace/myproj/tf2-mnist-end-to-end 》 python train.py

Load Mnist dataset.。

Create custom cnn.。

Model: “mnist_customcnn_model”

_________________________________________________________________

Layer (type) Output Shape Param #

=================================================================

input_1 (InputLayer) [(None, 28, 28, 1)] 0

_________________________________________________________________

conv2d (Conv2D) (None, 26, 26, 32) 320

_________________________________________________________________

max_pooling2d (MaxPooling2D) (None, 13, 13, 32) 0

_________________________________________________________________

conv2d_1 (Conv2D) (None, 11, 11, 64) 18496

_________________________________________________________________

max_pooling2d_1 (MaxPooling2 (None, 5, 5, 64) 0

_________________________________________________________________

conv2d_2 (Conv2D) (None, 3, 3, 64) 36928

_________________________________________________________________

flatten (Flatten) (None, 576) 0

_________________________________________________________________

dense (Dense) (None, 64) 36928

_________________________________________________________________

dense_1 (Dense) (None, 10) 650

=================================================================

Total params: 93,322

Trainable params: 93,322

Non-trainable params: 0

_________________________________________________________________

Fit on dataset.。

Epoch 1/10

782/782 [==============================] - 13s 16ms/step - loss: 0.1843 - accuracy: 0.9427 - val_loss: 0.0701 - val_accuracy: 0.9813

Epoch 2/10

782/782 [==============================] - 5s 7ms/step - loss: 0.0529 - accuracy: 0.9835 - val_loss: 0.0543 - val_accuracy: 0.9855

Epoch 3/10

782/782 [==============================] - 5s 7ms/step - loss: 0.0346 - accuracy: 0.9894 - val_loss: 0.0472 - val_accuracy: 0.9877

Epoch 4/10

782/782 [==============================] - 5s 7ms/step - loss: 0.0252 - accuracy: 0.9929 - val_loss: 0.0463 - val_accuracy: 0.9878

Epoch 5/10

782/782 [==============================] - 5s 7ms/step - loss: 0.0188 - accuracy: 0.9945 - val_loss: 0.0494 - val_accuracy: 0.9896

Epoch 6/10

782/782 [==============================] - 5s 7ms/step - loss: 0.0147 - accuracy: 0.9956 - val_loss: 0.0513 - val_accuracy: 0.9901

Epoch 7/10

782/782 [==============================] - 5s 7ms/step - loss: 0.0121 - accuracy: 0.9966 - val_loss: 0.0452 - val_accuracy: 0.9920

Epoch 8/10

782/782 [==============================] - 5s 7ms/step - loss: 0.0096 - accuracy: 0.9973 - val_loss: 0.0542 - val_accuracy: 0.9906

Epoch 9/10

782/782 [==============================] - 5s 7ms/step - loss: 0.0088 - accuracy: 0.9976 - val_loss: 0.0640 - val_accuracy: 0.9893

Epoch 10/10

782/782 [==============================] - 5s 7ms/step - loss: 0.0073 - accuracy: 0.9978 - val_loss: 0.0709 - val_accuracy: 0.9893

Save trained model to./models/float_model.h5.

Evaluate model on test dataset.。

157/157 [==============================] - 1s 3ms/step - loss: 0.0426 - accuracy: 0.9911

loss: 0.043

acc: 0.991

(vitis-ai-tensorflow2) Vitis-AI /workspace/myproj/tf2-mnist-end-to-end 》 python quantize.py

Load float model.。

Load Mnist dataset.。

Run quantization.。

[INFO] Start CrossLayerEqualization.。.

10/10 [==============================] - 0s 32ms/step

[INFO] CrossLayerEqualization Done.

[INFO] Start Quantize Calibration.。.

157/157 [==============================] - 12s 77ms/step

[INFO] Quantize Calibration Done.

[INFO] Start Generating Quantized Model.。.

[Warning] Skip quantize pos adjustment for layer quant_dense, its quantize pos is [i=None, w=8.0, b=9.0, o=3.0]

[INFO] Generating Quantized Model Done.

Saved quantized model as 。/models/quantized_model.h5

(vitis-ai-tensorflow2) Vitis-AI /workspace/myproj/tf2-mnist-end-to-end 》 python eval_quantized.py

Load quantized model.。

WARNINGNo training configuration found in the save file, so the model was *not* compiled. Compile it manually.

Load Mnist dataset.。

Compile model.。

Evaluate model on test Dataset

157/157 [==============================] - 4s 22ms/step - loss: 0.0417 - accuracy: 0.9913

loss: 0.042

acc: 0.991

(vitis-ai-tensorflow2) Vitis-AI /workspace/myproj/tf2-mnist-end-to-end 》 python finetune.py

Load float model.。

Load Mnist dataset.。

Create quantize training model.。

[INFO] Start CrossLayerEqualization.。.

10/10 [==============================] - 0s 33ms/step

[INFO] CrossLayerEqualization Done.

Compiling model.。

Fit on Dataset.。

Epoch 1/10

782/782 [==============================] - 48s 61ms/step - loss: 0.0077 - accuracy: 0.9978 - val_loss: 0.0738 - val_accuracy: 0.9882

Epoch 2/10

782/782 [==============================] - 39s 50ms/step - loss: 0.0062 - accuracy: 0.9980 - val_loss: 0.0845 - val_accuracy: 0.9888

Epoch 3/10

782/782 [==============================] - 40s 51ms/step - loss: 0.0058 - accuracy: 0.9983 - val_loss: 0.0810 - val_accuracy: 0.9885

Epoch 4/10

782/782 [==============================] - 40s 51ms/step - loss: 0.0061 - accuracy: 0.9982 - val_loss: 0.0744 - val_accuracy: 0.9902

Epoch 5/10

782/782 [==============================] - 40s 51ms/step - loss: 0.0048 - accuracy: 0.9984 - val_loss: 0.0834 - val_accuracy: 0.9911

Epoch 6/10

782/782 [==============================] - 39s 50ms/step - loss: 0.0047 - accuracy: 0.9986 - val_loss: 0.0807 - val_accuracy: 0.9893

Epoch 7/10

782/782 [==============================] - 39s 50ms/step - loss: 0.0039 - accuracy: 0.9987 - val_loss: 0.0894 - val_accuracy: 0.9903

Epoch 8/10

782/782 [==============================] - 39s 50ms/step - loss: 0.0034 - accuracy: 0.9989 - val_loss: 0.0863 - val_accuracy: 0.9904

Epoch 9/10

782/782 [==============================] - 39s 49ms/step - loss: 0.0042 - accuracy: 0.9989 - val_loss: 0.1043 - val_accuracy: 0.9893

Epoch 10/10

782/782 [==============================] - 39s 50ms/step - loss: 0.0044 - accuracy: 0.9986 - val_loss: 0.0994 - val_accuracy: 0.9908

Saved finetuned model as 。/models/finetuned_model.h5

Evaluate model on test Dataset.。

157/157 [==============================] - 1s 7ms/step - loss: 0.0675 - accuracy: 0.9920

loss: 0.068

acc: 0.992

(vitis-ai-tensorflow2) Vitis-AI /workspace/myproj/tf2-mnist-end-to-end 》 bash -x compile_zcu102.sh

+ ARCH=/opt/vitis_ai/compiler/arch/DPUCZDX8G/ZCU102/arch.json

+ OUTDIR=。/compiled_model

+ NET_NAME=customcnn

+ MODEL=。/models/finetuned_model.h5

+ echo -----------------------------------------

-----------------------------------------

+ echo ‘COMPILING MODEL FOR ZCU102.?!?/p>

COMPILING MODEL FOR ZCU102.。

+ echo -----------------------------------------

-----------------------------------------

+ compile

+ tee compile.log

+ vai_c_tensorflow2 --model 。/models/finetuned_model.h5 --arch /opt/vitis_ai/compiler/arch/DPUCZDX8G/ZCU102/arch.json --output_dir 。/compiled_model --net_name customcnn

/opt/vitis_ai/conda/envs/vitis-ai-tensorflow2/lib/python3.7/site-packages/xnnc/translator/tensorflow_translator.py H5pyDeprecationWarning: dataset.value has been deprecated. Use dataset[()] instead.

value = param.get(group).get(ds).value

[INFO] parse raw model :100%|██████████| 10/10 [00:00《00:00, 16871.70it/s]

[INFO] infer shape (NHWC) :100%|██████████| 26/26 [00:00《00:00, 2956.30it/s]

[INFO] generate xmodel :100%|██████████| 26/26 [00:00《00:00, 5561.60it/s]

[INFO] Namespace(inputs_shape=None, layout=‘NHWC’, model_files=[‘。/models/finetuned_model.h5’], model_type=‘tensorflow2’, out_filename=‘。/compiled_model/customcnn_org.xmodel’, proto=None)

[INFO] tensorflow2 model: models/finetuned_model.h5

[OPT] No optimization method available for xir-level optimization.

[INFO] generate xmodel: /workspace/myproj/tf2-mnist-end-to-end/compiled_model/customcnn_org.xmodel

[UNILOG][INFO] The compiler log will be dumped at “/tmp/vitis-ai-user/log/xcompiler-20210325-093926-3120”

[UNILOG][INFO] Target architecture: DPUCZDX8G_ISA0_B4096_MAX_BG2

[UNILOG][INFO] Compile mode: dpu

[UNILOG][INFO] Debug mode: function

[UNILOG][INFO] Target architecture: DPUCZDX8G_ISA0_B4096_MAX_BG2

[UNILOG][INFO] Graph name: mnist_customcnn_model, with op num: 42

[UNILOG][INFO] Begin to compile.。.

[UNILOG][INFO] Total device subgraph number 3, DPU subgraph number 1

[UNILOG][INFO] Compile done.

[UNILOG][INFO] The meta json is saved to “/workspace/myproj/tf2-mnist-end-to-end/。/compiled_model/meta.json”

[UNILOG][INFO] The compiled xmodel is saved to “/workspace/myproj/tf2-mnist-end-to-end/。/compiled_model/customcnn.xmodel”

[UNILOG][INFO] The compiled xmodel‘s md5sum is 764142e83d074ea9470b9eb9d0757f68, and been saved to “/workspace/myproj/tf2-mnist-end-to-end/。/compiled_model/md5sum.txt”

**************************************************

* VITIS_AI Compilation - Xilinx Inc.

**************************************************

+ echo -----------------------------------------

-----------------------------------------

+ echo ’MODEL COMPILED‘

MODEL COMPILED

+ echo -----------------------------------------

-----------------------------------------

(vitis-ai-tensorflow2) Vitis-AI /workspace/myproj/tf2-mnist-end-to-end 》 bash -x make_target_zcu102.sh

+ echo -----------------------------------------

-----------------------------------------

+ echo ’MAKE TARGET ZCU102 STARTED.?!?/p>

MAKE TARGET ZCU102 STARTED.。

+ echo -----------------------------------------

-----------------------------------------

+ TARGET_ZCU102=。/target_zcu102

+ COMPILE_ZCU102=。/compiled_model

+ APP=。/application

+ NET_NAME=customcnn

+ rm -rf 。/target_zcu102

+ mkdir -p 。/target_zcu102/model_dir

+ cp 。/application/app_mt.py 。/target_zcu102

+ echo ’ Copied application to TARGET_ZCU102 folder‘

Copied application to TARGET_ZCU102 folder

+ cp 。/compiled_model/customcnn.xmodel 。/target_zcu102/model_dir/。

+ echo ’ Copied xmodel file(s) to TARGET_ZCU102 folder‘

Copied xmodel file(s) to TARGET_ZCU102 folder

+ mkdir -p 。/target_zcu102/images

+ python generate_images.py --dataset=mnist --image_dir=。/target_zcu102/images --image_format=jpg --max_images=10000

2021-03-25 0934.445257: I tensorflow/stream_executor/platform/default/dso_loader.cc:48] Successfully opened dynamic library libcudart.so.10.1

Command line options:

--dataset : mnist

--subset : test

--image_dir : 。/target_zcu102/images

--image_list :

--label_list :

--image_format : jpg

--max_images : 10000

+ echo ’ Copied images to TARGET_ZCU102 folder‘

Copied images to TARGET_ZCU102 folder

+ echo -----------------------------------------

-----------------------------------------

+ echo ’MAKE TARGET ZCU102 COMPLETED‘

MAKE TARGET ZCU102 COMPLETED

+ echo -----------------------------------------

-----------------------------------------

在 ZynqMP 評估板上運行

進行電路板設置。

之后,將 target_zcu10x 目錄中的所有文件復制到 SD 卡。從 SD 卡啟動 ZCU10x(下面實例運行的是 zcu104),運行 app_mt.py。結果顯示,實際運行模型的精度為 99.13%.

root@xilinx-zcu104-2020_2:~/target_zcu104# python3 app_mt.py --threads 4

Command line options:

--image_dir : images

--threads : 4

--model : model_dir/customcnn.xmodel

Pre-processing 10000 images.。.

Starting 4 threads.。.

Throughput=5622.61 fps, total frames = 10000, time=1.7785 seconds

Correct:9913, Wrong:87, Accuracy:0.9913

原文標題:開發(fā)者分享 | Vitis-AI 1.3/TensorFlow2 環(huán)境下使用自定義 CNN 模型進行 Mnist 分類

文章出處:【微信公眾號:XILINX技術社區(qū)】歡迎添加關注!文章轉(zhuǎn)載請注明出處。

責任編輯:haq

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

    關注

    2

    文章

    1461

    瀏覽量

    61492
  • 模型
    +關注

    關注

    1

    文章

    3032

    瀏覽量

    48363

原文標題:開發(fā)者分享 | Vitis-AI 1.3/TensorFlow2 環(huán)境下使用自定義 CNN 模型進行 Mnist 分類

文章出處:【微信號:gh_2d1c7e2d540e,微信公眾號:XILINX開發(fā)者社區(qū)】歡迎添加關注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關推薦

    創(chuàng)建自定義的基于閃存的引導加載程序(BSL)

    電子發(fā)燒友網(wǎng)站提供《創(chuàng)建自定義的基于閃存的引導加載程序(BSL).pdf》資料免費下載
    發(fā)表于 09-19 10:50 ?0次下載
    <b class='flag-5'>創(chuàng)建</b><b class='flag-5'>自定義</b>的基于閃存的引導加載程序(BSL)

    如何創(chuàng)建TestStand自定義步驟

    在之前的課程中簡單地介紹過TestStand自帶的些步驟類型,如測試、消息彈窗、賦值、標簽等等,這些簡單的步驟從TestStand的插入選版中就可以添加到序列中。那么在使用中如果碰到需要實現(xiàn)更加靈活、復雜的功能,使用自帶的些步驟類型可能難以滿足,這時就需要使用到
    的頭像 發(fā)表于 09-11 14:46 ?557次閱讀
    如何<b class='flag-5'>創(chuàng)建</b>TestStand<b class='flag-5'>自定義</b>步驟

    keras模型轉(zhuǎn)tensorflow session

    在這篇文章中,我們將討論如何將Keras模型轉(zhuǎn)換為TensorFlow session。 KerasTensorFlow簡介 Keras
    的頭像 發(fā)表于 07-05 09:36 ?315次閱讀

    何在IDF框架中使用自定義的靜態(tài)庫和動態(tài)庫?

    基于商業(yè)需要,我們需要在 ESP-IDF v4.0-rc 這個版本的IDF中開發(fā)與使用自定義庫,有如下問題請協(xié)助: 1如何利用IDF框架編寫自定義靜態(tài)庫和動態(tài)庫? 2何在IDF框架中
    發(fā)表于 06-25 07:57

    TSMaster 自定義 LIN 調(diào)度表編程指導

    TSMaster(v2023.10.7.990)之后的版本中新增了實現(xiàn)自定義LIN調(diào)度表相關API。今天重點和大家分享下關于編程實現(xiàn)TSMaster自定義LIN調(diào)度表
    的頭像 發(fā)表于 05-11 08:21 ?425次閱讀
    TSMaster <b class='flag-5'>自定義</b> LIN 調(diào)度表編程指導

    LabVIEWRing自定義控件,其常量無法保持同步修改,如何解決

    時,其常量無法跟隨變換。 如圖所示,自定義常量可以修改成不同的映射關系,同樣都是“CSP”這個名稱,可以對應2或者8。 如果通過創(chuàng)建輸入控件的方式,則“CSP”這個名稱定對應的是
    發(fā)表于 04-24 11:20

    HarmonyOS開發(fā)實例:【自定義Emitter】

    使用[Emitter]實現(xiàn)事件的訂閱和發(fā)布,使用[自定義彈窗]設置廣告信息。
    的頭像 發(fā)表于 04-14 11:37 ?882次閱讀
    HarmonyOS開發(fā)實例:【<b class='flag-5'>自定義</b>Emitter】

    鴻蒙ArkUI實例:【自定義組件】

    組件是 OpenHarmony 頁面最小顯示單元,頁面可由多個組件組合而成,也可只由組件組合而成,這些組件可以是ArkUI開發(fā)框架自帶系統(tǒng)組件,比如?`Text`?、?`But
    的頭像 發(fā)表于 04-08 10:17 ?486次閱讀

    使用BGM210L創(chuàng)建自定義PCB,是否可以與GPIO引腳共享調(diào)試引腳?

    你好 我想使用 BGM210L 創(chuàng)建自定義 PCB,并在此自定義 PCB 上實現(xiàn)調(diào)試接口(SWCLK、SWDIO 等)。 由于只有幾個引
    發(fā)表于 01-16 08:12

    基于TensorFlowKeras的圖像識別

    TensorFlowKeras最常見的用途之是圖像識別/分類。通過本文,您將了解如何使用Keras達到這目的。
    的頭像 發(fā)表于 01-13 08:27 ?664次閱讀
    基于<b class='flag-5'>TensorFlow</b>和<b class='flag-5'>Keras</b>的圖像識別

    博途用戶自定義庫的使用

    博途官方提供了很多庫,比如:基本函數(shù)庫、通信庫、安全庫、驅(qū)動庫等等,用戶可以使用庫中的函數(shù)/函數(shù)塊來完成具體的控制任務。除了官方的庫,我們也可以創(chuàng)建自己的庫(用戶自定義庫)。比如,把項目
    的頭像 發(fā)表于 12-25 10:08 ?664次閱讀
    博途用戶<b class='flag-5'>自定義</b>庫的使用

    Maxwell中兩種用戶自定義材料庫的實現(xiàn)方法

    Maxwell支持兩種用戶自定義材料庫。種是User Library(UserLib),另種是Personal Library(PersonalLib)。UserLib通常是
    的頭像 發(fā)表于 12-14 17:33 ?4340次閱讀
    Maxwell中兩種用戶<b class='flag-5'>自定義</b>材料庫的實現(xiàn)方法

    何在Matlab中自定義Message

    自定義Message 當我們的 message 消息比較復雜時,通常要用到自定義的 message 消息,MATLAB 2020b以上的版本自帶了ROS Toolbox Interface
    的頭像 發(fā)表于 11-15 18:12 ?1039次閱讀
    如<b class='flag-5'>何在</b>Matlab中<b class='flag-5'>自定義</b>Message

    OpenHarmony自定義構建函數(shù):@Builder裝飾器

    ()函數(shù)語法規(guī)則,開發(fā)者可以將重復使用的UI元素抽象成方法,在build方法調(diào)用。 為了簡化語言,我們將@Builder裝飾的函數(shù)也稱為“自定義構建函數(shù)”。 說明: 從
    發(fā)表于 09-26 16:36

    OpenHarmony自定義組件介紹

    使用@Entry裝飾自定義組件。@Entry可以接受可選的LocalStorage的參數(shù)。 說明: 從
    發(fā)表于 09-25 15:36