0

我正在构建一个简单的自定义 Keras 模型,如下所示:

model = Sequential()
model.add(Conv2D(16, (16, 1), activation='relu', input_shape=(300,2,1) ))   
model.add(Dropout(0.1))

model.add(Conv2D(32, (16, 1), activation='relu'))                               
model.add(Dropout(0.2))

model.add(Flatten())

model.add(Dense(32, activation='relu'))
model.add(Dropout(0.5))

model.add(Dense(3, activation='softmax'))

Keras 模型需要使用 Xilinx 的 Vitis-AI 编译才能在 FPGA 上运行。我们按照Xilinx 的 Vitis AI 教程中概述的步骤来编译模型。

但是,我们在编译阶段遇到了以下错误:

[VAI_C-BACKEND][Check Failed: (kernel_h - stride_h) <= 3 * pixel_parallel * stride_h][/home/xbuild/conda-bld/dnnc_1592904456005/work/submodules/asicv2com/src/Operator/OperatorConv.cpp:53][DATA_OUTRANGE][Data value is out of range!]

关于此错误消息可能意味着什么的任何想法?甚至,我们如何才能获得更多的调试信息?

我们之前在 python 环境中使用此模型成功地训练和运行了推理。

4

2 回答 2

0

Vitis AI 手册中提到:“目前,vai_c_tensorflow2 仅支持 Keras 功能 API。后续版本将支持顺序 API。” 手册 v1-3 第 86 页

因此,如果您使用 tf2,首先将您的模型重写为函数格式。 函数式api

如果错误仍然存​​在,还请查看您正在使用的层是否都受支持,tf1 和 tf2 之间支持的层之间存在差异。

于 2021-04-27T08:28:59.473 回答
0

CNN 模型的输入需要与 VITIS AI 保持一致。上述问题中提出的模型没有任何不正确或不受支持的地方。

如果输入图像不是正方形,编译步骤将失败,如下所示:

[VAI_C-BACKEND][Check Failed: (kernel_h - stride_h) <= 3 * pixel_parallel * stride_h][/home/xbuild/conda-bld/dnnc_1592904456005/work/submodules/asicv2com/src/Operator/OperatorConv.cpp:53][DATA_OUTRANGE][Data value is out of range!]

如果输入不是正方形,则必须对其进行填充以形成正方形。

padding = int(input_shape[0] - input_shape[1])
model.add(Conv2D(16, (16, 1), activation='relu', input_shape=(300,2+padding,1) )) 

我希望这个答案对某人有所帮助。

于 2021-06-30T00:05:49.510 回答