#tensorflow #machine-learning #keras #xilinx #vitis-ai
#tensorflow #машинное обучение #keras #xilinx #vitis-ai
Вопрос:
Я создаю простую пользовательскую модель 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 должна быть скомпилирована с использованием Vitis-AI Xilinx для запуска на 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.
Ответ №1:
В руководстве Vitis AI упоминается: «В настоящее время vai_c_tensorflow2 поддерживает только функциональные API Keras. Последовательные API-интерфейсы будут поддерживаться в будущих выпусках «. руководство пользователя v1-3 страница 86
Поэтому, если вы используете tf2, начните с переписывания вашей модели в функциональный формат. функциональный api
Если ошибка сохраняется, также посмотрите на слои, которые вы используете, если все они поддерживаются, есть различия между поддерживаемыми слоями между tf1 и tf2.
Ответ №2:
ВХОДНЫЕ ДАННЫЕ ДЛЯ МОДЕЛИ 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) ))
Я надеюсь, что этот ответ кому-то поможет.