1

我开发了一个图像处理程序,可以识别给定数字图像的数字。每张图像为 27x27 像素 = 729 像素。我取每个 R、G 和 B 值,这意味着我从每个图像中有 2187 个变量(截距 +1 = 总共 2188)。

我使用了以下梯度下降公式:

Repeat {
    θj = θj−α/m∑(hθ(x)−y)xj
}

其中θj是变量 j 的系数;α是学习率;hθ(x)是假设;y是实际值,xj是变量 j 的值。m是训练集的数量。hθ(x),y是针对每个训练集的(即,这就是求和符号的用途)。进一步的假设被定义为:

hθ(x) = 1/(1+ e^-z)
z= θo + θ1X1+θ2X2 +θ3X3...θnXn

有了这个和 3000 张训练图像,我能够在一个多小时内训练我的程序,并且在交叉验证集上进行测试时,它能够识别正确的图像 ~ 67% 的时间。

我想改进它,所以我决定尝试 2 次多项式。

然而,每张图像的变量数量从 2188 个跃升至 2,394,766 个!仅做一步梯度下降就需要我一个小时。

所以我的问题是,机器学习中如何处理大量变量?一方面,我没有足够的空间来为每个训练集保存那么多变量。另一方面,我目前为每个训练样本存储 2188 个变量,但我必须执行 O(n^2) 才能将每个变量的值乘以另一个变量(即多项式到 2 阶值)。

因此,非常感谢任何建议/建议。

4

2 回答 2

1
  • 尝试首先使用一些降维(PCA、内核 PCA 或 LDA,如果您正在对图像进行分类)

  • 矢量化你的梯度下降 - 使用大多数数学库或 matlab 等,它会运行得更快

  • 并行化算法,然后在多个 CPU 上运行(但也许你的向量乘法库已经支持并行计算)

于 2013-06-26T12:22:35.857 回答
0

除了 Jirka-x1 的回答之外,我首先要说的是,这是处理图像数据而不是 ML 的文本数据的主要区别之一:高维。

其次...这是重复的,请参阅如何处理具有高维输入空间的机器学习问题?

于 2013-06-26T18:10:21.833 回答