如何使用Swift对数组进行L2归一化

时间:2019-02-09 17:20:59

标签: ios swift scikit-learn swift4 coreml

我正在尝试像下面那样标准化我的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转换规范化器,但是出现了如下所示的错误:

1 个答案:

答案 0 :(得分:2)

vDSP_normalizeD使用平均值和标准偏差。那和L2不同。

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