不理解将 .pb 转换为 ff-lite 时的平均值和标准开发值
Dont understand mean values and std dev values when convertig .pb to ff-lite
我正在尝试量化存储在.pb中的张量流图。 网络的输入是一个矩阵,每行都用平均值 0 和标准 1 进行归一化。 我想创建一个 tensorflow-lite 模型量化以更快地识别干扰。 我不知道如何将输入传递给行转换。它只是一个值吗?具有 64 个值的向量?它是如何通过的?
该模型在没有量化的情况下转换得很好。
tflite_convert
--output_file=model_simple_weight_q.tflite
--graph_def_file=model_simple.pb
--inference_type=QUANTIZED_UINT8
--input_arrays=input
--output_arrays=LogSoftmax
--mean_values= # dont know
--std_dev_values=# dont know
例如,如果我传递两个单个值,--mean_values=127 和 --std_dev_values=128。只是为了知道会发生什么,我收到以下错误:
F tensorflow/lite/toco/graph_transformations/resolve_constant_gather.cc:108] Check failed: coords_array.data_type == ArrayDataType::kInt32 Only int32 indices are supported
Aborted (core dumped)
您看到的错误与平均值/std_dev值无关。这是一般转换图形时的错误。它说在你的一个图操作中,索引用于tf.gather
(或者可能是切片(,并且它有一个不int32
的类型,但这是唯一支持的索引类型。
不幸的是,TFLite 转换错误通常不会告诉您导致错误的源代码,因此您必须做出明智的猜测。
关于平均值/std_dev值,我建议你看看这个答案: https://stackoverflow.com/a/58096430/834565
由于输入的每一行都以平均值 0 和标准 1 归一化,因此您应该给出--mean_values=0
和--std_dev_values=1
。此外,当您进行"虚拟后跟踪量化"时,您需要为激活函数提供最小和最大范围。您需要提供 --default_ranges_min= 和 --default_ranges_max= 。
由于张量流没有提供关于如何计算激活范围的非常清晰的描述,因此最好使用少量校准数据进行"训练后全整数量化" - 这里 .在该方法中,使用校准图像计算激活函数的范围。
问候
相关文章:
- 计算数组c++的平均值
- 使用CMake检测支持的C++标准
- 如何理解C++标准N3337中的expr.const.cast子句8
- "throw expression code" 1e7 >返回 d 是什么?投掷标准::overflow_error( "too big" ) : d;意味 着?
- 编译标准库类型
- 标准是否使用多余的大括号(例如 T{{{10}}})定义列表初始化?
- 计算平均值,不包括上次得分
- 编译器如何在使用SFINAE的函数和标准函数之间确定两者是否可行
- 彩色图像的卤化物处理平均值
- 如何创建一个函数来计算并返回平均值、最大值和最小值
- 铸造标准::有没有回到原来的类型
- 标准 N3337 5.2.10 第 7 条中的C++"类型"是什么意思?
- this_thread::sleep_for和计时时钟之间的关系是否由C++11标准指定
- 不理解将 .pb 转换为 ff-lite 时的平均值和标准开发值
- 如何使用向量查找平均值和标准差
- 没有平均值 C++ 的标准偏差
- 如何在C++中随机采样具有给定平均值和标准误差的正态分布
- C++计算平均值和标准偏差
- 将军事时间转换为标准格式(HH:MM)并以标准格式计算平均值.三个问题
- 在C++中计算单通道直方图的平均值和标准偏差