问题描述
我正在构建一个简单的自定义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,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's Vitis AI tutorials概述的步骤来编译模型。
但是,我们在编译阶段遇到以下错误:
[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环境中,我们已经成功使用此模型进行了训练和推理。
解决方法
Vitis AI 手册中提到: “目前,vai_c_tensorflow2 仅支持 Keras 函数式 API。顺序 API 将 未来版本支持。”手册 v1-3 第 86 页
因此,如果您使用 tf2,请首先将您的模型重写为函数格式。 functional api
如果错误仍然存在,请查看您正在使用的图层,如果它们都受支持,tf1 和 tf2 之间支持的图层之间存在差异。
,对于 VITIS AI,CNN 模型的输入必须是平方的。上述问题中提出的模型没有任何不正确或不受支持的内容。
如果输入的图像不是如下所示的方形,则编译步骤将失败:
[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) ))
我希望这个答案对某人有所帮助。