我的输入是范围在(0, 1]内的(r,c),表示图像像素的坐标,其颜色仅为1或2。
我有大约6,400个像素。我尝试拟合X=(r,c)和y=颜色,结果失败了,准确率始终无法超过70%。
第一张是实际图像,第二张是我用于训练的图像,仅有两种颜色。最后一张是神经网络生成的图像,经过了500个权重和50次迭代的训练。输入层为2,一个隐藏层大小为100,输出层为2。(对于这种二元分类,我可能只需要一个输出层,但我正在为多类分类做准备)
分类器未能拟合训练集,这是为什么?我尝试生成这两个特征的高次多项式项,但没有帮助。我尝试使用高斯核和在图片上随机选择20-100个地标来增加更多特征,结果也类似。我还尝试了逻辑回归,同样没有帮助。
请帮助我提高准确率。
这是输入:input.txt(你可以将其加载到Octave中,变量为坐标(r,c特征)和idx(颜色))
你可以先尝试绘制它,以确保你理解输入,然后尝试在其上进行训练,并告诉我是否得到了更好的结果。
回答:
你的问题难以建模。你试图拟合从R^2到R的函数,这个函数具有很多复杂性——很多“尖峰”,很多不连续区域(与其他部分完全分离的像素)。这不是一个容易的问题,也不是一个有用的问题。为了使你的网络过拟合到这种设置,你将需要大量的隐藏单元。那么,有哪些选项可以做到这一点呢?
问题中缺少的但很重要的一般内容
- 如果你是通过交叉熵成本(对数似然)来拟合你的网络,那么你的输出变量应该是{0, 1},这是你应该用于分类的成本函数。
- 50次迭代(如果你指的是某种小批量迭代)数量级太小,除非你是指50个周期(对整个训练集的迭代)。
实际需要做的可能的事情(至少需要做以下一项):
- 我假设你使用的是ReLU激活函数(或者Tanh,从输出来看很难说)——你可以改用RBF激活函数,并将隐藏神经元的数量增加到约5000个,
- 如果你不想使用RBF,那么你将需要1-2个额外的隐藏层来拟合这种复杂度的函数。尝试使用100-100-100这样的架构。
- 如果上述方法失败——增加隐藏单元的数量,这就是你所需要的——足够的容量。
总的来说:神经网络并不是为处理低维数据集而设计的。这是网络上一个很好的例子,你可以学习像素位置到颜色的映射,但它完全是人为的,似乎实际上损害了人们的直觉。