为什么在XCubeAI/STM32CubeMX.AI中,压缩级别“None”和“4x”的权重完全相同?

2024-06-16 13:56:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个以HDF5(*.h5)格式保存的Keras模型。我正在使用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文件包含我的神经网络的重量。但是,当我将compression设置为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的权重没有差异吗


Tags: 文件datagetincludennai权重compression
1条回答
网友
1楼 · 发布于 2024-06-16 13:56:47

与我的预期相反,压缩似乎并不总是进行,而是仅在某些情况下进行,这些情况没有完全为公众定义:See here此外,我查看了模型转换报告nn_generate_report.txt,它没有显示压缩标记“(c)”对于我的任何神经网络层,压缩级别为4。但对于压缩级别8,所有层都用它标记。所以,我认为一切都很好

相关问题 更多 >