我开发了一个图像处理程序,用于识别给出数字图像的数字。每幅图像为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度值)。
所以非常感谢任何建议/意见。
答案 0 :(得分:1)
首先尝试使用某些降维(PCA,内核PCA或LDA,如果您对图像进行分类)
矢量化你的渐变下降 - 使用大多数数学库或matlab等,它会运行得更快
并行化算法,然后在多个CPU上运行(但是你的库可以用于乘法向量已经支持并行计算)
答案 1 :(得分:0)
与Jirka-x1的答案一起,我首先要说这是处理图像数据的主要区别之一,而不是ML的文本数据:高维度。
第二......这是重复的,请参阅How to approach machine learning problems with high dimensional input space?