如何使用 Swift 对数组进行 L2 规范化

How to L2 normalize an array with Swift

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

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

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

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

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

的输入

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

vDSP_normalizeD 使用均值和标准差。那和L2不一样。

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