2014-03-07 15 views
2

我正在编程一个函数逼近神经网络,即试图逼近一个非常复杂的函数。对于神经网络来说,“训练数据越多越好”是真的吗?

对于训练数据我产生了两个限制之间的1000个随机数,然后我通过函数f(x)传递这些数字,并得到了输出。

我的神经网络旨在近似这个函数的逆。因此,我将使用函数的输出作为输入训练数据,并将1000个随机数作为输出训练数据。

问题是,当一个随机数被放到函数f(x)中时,输出将在0到0.01之间的可能性很大,非常罕见的是它会落在这个范围之外。下面是一个数字线,功能输出的1000个数字绘制在上面。正如你可以看到这些例子并没有统一涵盖所有可能的数字。

Distribution of 1000 training examples

为了解决这个问题我用了很多的训练实例,希望会有在0.1〜0.9范围内更多的例子,但是这意味着使用的例子荒谬的数字。

因此,对于这样的功能,使用更多示例还是更好,或者如果您使用大量数据会出现问题吗?

回答

1

简单地去除0.01以上的所有数据,然后将数据从0到0.01归一化为-1到1.由于0.01以上的数据点很少,因此删除它们不会影响训练。

或者,尝试:

我建议正火独立的数字数据通过计算 装置和数字X数据的标准偏差,然后应用 变换(X - 平均值)/ STDDEV。

http://visualstudiomagazine.com/articles/2013/07/01/neural-network-data-normalization-and-encoding.aspx

你想沿着范围从0到1(或-1到1)更均匀地分布在集群的数据。

-1

“越多越好”只能达到一个点;你可以有太多的神经网络数据。

您有过多样品过度训练或过度训练的风险。

+3

过度拟合是由于训练过多(迭代/时代太多)而造成的,而不是太多的数据。有了一个巨大的数据集,即使是一个比必要的大得多且噪音很大的数据集,如果您在合适的点退出训练,网络将会准确无误。 – andrelucas

+0

这就是我的想法。如果有什么大数据集可以减少过度拟合的机会。过度拟合是由成本函数的价值被最小化到如此低的值所引起的,神经网络的功能将几乎精确地通过所有的训练点(导致成本函数低),但并不接近趋势其他地区的积分。使用更多的训练点可以减少发生这种情况的几率。 – Blue7

2

是否有可能试图拟合f(x)的对数或一些基于对数的变换?它可以更均匀地分配你的输出。