我有一个以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文件包含我的神经网络的权重。然而,当我将压缩设置为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,...
我们可以清楚地看到,8x压缩的权重缓冲区明显更小。
有人知道为什么压缩级别为“无”和“4”时权重没有差异吗?
回答:
与我的预期相反,压缩似乎并不是总会进行,而只是在某些未完全公开定义的情况下进行:参见此处 此外,我查看了模型转换报告nn_generate_report.txt,对于压缩级别4,我的任何神经网络层都没有显示压缩标记“(c)”。但对于压缩级别8,所有层都标记了它。所以,我认为一切正常。