为什么在X-Cube-AI / STM32CubeMX.AI中,压缩级别为“无”和“4x”时得到的权重完全相同?

我有一个以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,所有层都标记了它。所以,我认为一切正常。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注