#python #c #keras #embedded #artificial-intelligence
#python #c #keras #встроенный #искусственный интеллект
Вопрос:
У меня есть модель Keras, сохраненная в формате HDF5 (* .h5). Я использую инструмент командной строки stm32ai для создания моих файлов nn.c /.h, а также nn_data.c /.h. Одним из примеров команды является следующая:
~/STM32Cube/Repository/Packs/STMicroelectronics/X-CUBE-AI/5.2.0/Utilities/linux/stm32ai generate --model nn.h5 --verbosity 2 --type keras --name nn --compression 4
Файл nn_data.c содержит значения веса моей нейронной сети. Однако, когда я устанавливаю сжатие на 1, что означает отсутствие сжатия, я получаю:
#include "nn_data.h"
ai_handle ai_nn_data_weights_get(void)
{
AI_ALIGNED(4)
static const ai_u8 s_nn_weights[ 3196 ] = {
0x56, 0xff, 0xa5, 0x3d, 0xb6, 0xa2, 0xf3, 0x3d, 0x18, 0x2c,
0x4e, 0xbc, 0x69, 0x64, 0xa4, 0x3d, 0x09, 0xf4, 0x27, 0x3e,
...
И когда я устанавливаю сжатие на 4 (4x) Я получаю точно такие же веса!
Только для сжатия 8 я получаю разные веса:
#include "nn_data.h"
ai_handle ai_nn_data_weights_get(void)
{
AI_ALIGNED(4)
static const ai_u8 s_nn_weights[ 728 ] = {
0x0d, 0x5d, 0xa0, 0xbe, 0x20, 0xf7, 0x86, 0xbe, 0x83, 0xe4,
0x66, 0xbe, 0xca, 0x73, 0x36, 0xbe, 0x8d, 0xa9, 0xf7, 0xbd,
...
Мы можем ясно видеть, что буфер веса для 8-кратного сжатия значительно меньше.
У кого-нибудь есть идея, почему веса не отличаются для уровней сжатия None и 4?
Ответ №1:
В отличие от моих ожиданий, сжатие, похоже, выполняется не всегда, а только в определенных случаях, которые не полностью определены для общественности: Смотрите здесь Дополнительно, я просмотрел отчет о преобразовании модели nn_generate_report.txt и он не показывает метку сжатия «(c)» ни для одной из моих нейронных сетейслои для уровня сжатия 4. Но для уровня сжатия 8 все слои отмечены им. Итак, я предполагаю, что все в порядке.