Почему я получаю одинаковые веса для уровней сжатия «Нет» и «4x» в X-Cube-AI / STM32CubeMX.AI ?

#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 все слои отмечены им. Итак, я предполагаю, что все в порядке.