ios - 如何使用 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 转换规范化器,但出现错误,如下所示:
解决方案
vDSP_normalizeD
使用平均值和标准差。这与L2不同。
L2 归一化首先计算向量的 L2 范数,它与 相同sqrt(v[0]*v[0] + v[1]*v[1] + ... + v[n]*v[n])
,然后将向量的每个元素除以该数字。
推荐阅读
- c# - 我在返回函数的变量时遇到问题
- c++ - dummy_array 失败
arr(); - scala - 用于模式匹配具有偏函数的无形联积的库
- python - 在 Python 中使用 Curl 获取文件信息的问题
- r - Logit 交叉验证未运行
- vue.js - Nuxt: Inside a plugin, how to add dynamic script tag to head?
- shopify - Shopify 购物车 - 动态自定义字段片段重复
- c++ - 错误:'GenericEnclosure::GenericEnclosure' 命名构造函数,而不是类型
- git - 为什么 Git rebase 不像 Darcs 那样需要指数级的时间?
- typescript - 如何禁用生成“exports.__esModule = true;” 和“要求(“lib”);”