首页 > 解决方案 > 如何使用 Swift 对数组进行 L2 标准化

问题描述

我正在尝试规范化我的 CoreML 模型的输入,如下所示,它对数组做了一些事情,但它与 SKLearn 所做的完全不同(我在这些环境中给出相同的输入并观察输出)。所以显然我做错了什么。

我的模型是用 Keras 和 SKlearn 训练的,它必须执行与我使用 SKLearn Normalizer 相同的规范化,这是默认的L2 normalizer。我在下面做的显然不等于sklearn,有什么想法吗?

    vDSP_normalizeD(vec, 1, &normalizedVec, 1, &mean, &std, vDSP_Length(count))

    let (normalizedXVec, _, _) = normalize(vec: doubleArray)

然后在这里我将normalizedXVec转换为MLMultiArray并用作我的预测器的输入

注意:我还尝试使用 coreml 工具从 sklearn 转换规范化器,但出现错误,如下所示:

标签: iosswiftscikit-learnswift4coreml

解决方案


vDSP_normalizeD使用平均值和标准差。这与L2不同。

L2 归一化首先计算向量的 L2 范数,它与 相同sqrt(v[0]*v[0] + v[1]*v[1] + ... + v[n]*v[n]),然后将向量的每个元素除以该数字。


推荐阅读