TFLearn大型数据集将丢失

2024-10-02 12:32:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我不知道你能不能帮我,但我有个问题我想不出来。我有一个大约45万个条目的大数据集。每个条目都是大约700个整数的列表,格式如下:

[217088.0, 212992.0, 696.0, 191891.0, 524.0, 320.0, 0.0, 496.0, 0, 0, 364.0, 20.0, 0, 1.0, 0, 0.0, 0, 4.0, 22.0, 0, 672.0, 46.0, 16.0, 0.0, 0.0, 106496.0, 8.0, 0, 4.0, 2.0, 26.0, 640.0, 0.0, 1073741888.0, 624.0, 516.0, 4.0, 3.0, 0, 4319139.0, 0.0, 0, 0.0, 36.0, 8.0, 217088.0, 0.0, 0, 0, 0, 4.0, 5.0, 0, 20.0, 255624.0, 65535.0, 5.10153058443, 396.0, 4319140.0, 552.0, 144.0, 28.0, 5.0, 1048576.0, 217088.0, 350.0, 0.0, 0, 7.0, 1048576.0, 260.0, 0, 116.0, 0, 322.0, 0.0, 0, 4319141.0, 0.0, 10.0, 0.0, 9.0, 4.0, 0, 0, 0, 6.36484131641, 0.0, 0, 11.0, 72.0, 372.0, 45995.0, 217088.0, 0, 4096.0, 12.0, 80.0, 592.0, 264.0, 0, 0, 4096.0, 0.0, 256.0, 0.0, 49152.0, 700.0, 0, 4096.0, 0, 0, 0.0, 336.0, 8.0, 0, 0.0, 0, 4319142.0, 0.0, 60.0, 308.0, 4319143.0, 0, 0, 0, 0, 0, 0.742746270768, 316.0, 420.0, 276.0, 1073741888.0, 0.0, 332.0, 284.0, 0, 1107296320.0, 0.0, 4.0, 13.0, 18.0, 0.0, 632.0, 424.0, 261200.0, 0.0, 299008.0, 0.0, 4096.0, 0, 0.0, 299008.0, 0, 658.0, 0, 4319144.0, 4319145.0, 12.0, 50.0, 292.0, 688.0, 484.0, 70.0, 20.0, 4319146.0, 16.0, 17.0, 0, 0, 0, 0.0, 18.0, 4.0, 330.0, 0.0, 0, 0.0, 42.0, 303104.0, 19.0, 8.0, 20.0, 0.0, 0.0, 544.0, 340.0, 0, 14.0, 0, 209078.0, 0.0, 0.0, 22.0, 0, 209078.0, 0.0, 0.0, 18932.0, 4319147.0, 4.58031739078, 0.0, 376.0, 0.0, 0, 632.0, 4.0, 0, 0, 0, 428.0, 0, 0, 323584.0, 0.0, 24.0, 4.0, 368.0, 12.0, 40.0, 0, 720.0, 4.0, 348.0, 267.0, 20468.0, 32.0, 45995.0, 303104.0, 0.0, 0.0, 0, 0, 224.0, 16.0, 4.0, 44.0, 0.0, 0.0, 444.0, 720.0, 0, 1180.0, 0.0, 16.0, 412.0, 0.0, 4.0, 8462.0, 600.0, 568.0, 16.0, 0, 2.0, 36.0, 0.0, 6.0, 0, 21.0, 0.0, 24.0, 0, 4.0, 652.0, 4319148.0, 92.0, 8.0, 2.0, 0, 0.0, 0, 16.0, 0, 0, 324.0, 4.0, 300.0, 0, 278.0, 400.0, 0, 0.0, 0, 352.0, 0, 0.0, 209078.0, 8.0, 4096.0, 8.0, 36.0, 0.0, 256.0, 268435456.0, 0.0, 48.0, 4319149.0, 6.0, 4319150.0, 0, 416.0, 0, 0, 283.0, 4.0, 0, 0, 0, 8.0, 592.0, 0, 0, 25.0, 0.0, 0, 0, 0.0, 332.0, 212992.0, 540.0, 512.0, 0, 532.0, 20.0, 26.0, 0.0, 0, 52.0, 440.0, 7.0, 488.0, 8.0, 12.0, 0.0, 60.0, 14.0, 3221225536.0, 7.0, 56.0, 432.0, 4.0, 0, 12.0, 0.0, 40.0, 680.0, 16.0, 504.0, 344.0, 576.0, 0.0, 452.0, 266240.0, 290816.0, 578.0, 0, 552.0, 34.0, 0.0, 636.0, 88.0, 698.0, 282.0, 328.0, 38.0, 8.0, 480.0, 64.0, 4319151.0, 0.0, 0.0, 34.0, 460.0, 64.0, 0, 612.0, 0.0, 4319152.0, 0, 604.0, 0, 436.0, 0, 0, 20.0, 0, 4.0, 0, 0, 0, 0, 40.0, 356.0, 584.0, 0, 84.0, 0.0, 0, 0, 0, 294912.0, 7.0, 29.0, 20.0, 0, 60.0, 0.0, 268.0, 536.0, 4319153.0, 0.0, 106.0, 456.0, 24.0, 404.0, 0, 31.0, 0, 380.0, 24.0, 648.0, 0.0, 0, 0, 0.0, 0, 0, 0, 0.0, 0, 0, 0.0, 0.0, 1883.0, 5.85655736551, 34.0, 17744.0, 28680.0, 38.0, 36.0, 0.0, 24576.0, 596.0, 107.0, 33.0, 4.0, 5.0, 0, 0, 45995.0, 384.0, 8.0, 0, 0, 500.0, 20468.0, 34.0, 312.0, 8.0, 660.0, 0.0, 35.0, 608.0, 0, 684.0, 8.0, 68.0, 0.0, 32.0, 34.0, 23117.0, 3.0, 520.0, 0, 4319154.0, 0, 0, 512.0, 8.0, 28.0, 4096.0, 0, 538.0, 0.0, 572.0, 0.0, 2.0, 36.0, 0.0, 0.0, 32.0, 32.0, 4.0, 28.0, 0, 4.0, 38.0, 68.0, 9.0, 0.0, 0, 0.0, 36.0, 39.0, 618.0, 0, 8.0, 266240.0, 4.0, 5.0, 34.0, 304.0, 0, 0.0, 20.0, 40.0, 0.0, 0.0, 0, 580.0, 556.0, 4.0, 8.0, 262.0, 0, 12.0, 32.0, 0, 76.0, 12.0, 184.0, 720.0, 4.0, 16.0, 644.0, 16.0, 28680.0, 4319155.0, 720.0, 0.0, 564.0, 392.0, 672.0, 0.0, 24.0, 492.0, 0, 0.0, 676.0, 0, 0, 0, 12.0, 592.0, 360.0, 8.0, 692.0, 552.0, 4.0, 36.0, 512.0, 7198.0, 42.0, 44.0, 45.0, 4319156.0, 20.0, 388.0, 476.0, 5.0, 36.0, 20480.0, 47.0, 16.0, 326.0, 0.0, 12.0, 0.0, 0.0, 7.0, 272.0, 280.0, 0.0, 0, 288.0, 48.0, 4319157.0, 10.0, 448.0, 4.0, 4.0, 0, 20468.0, 408.0, 2.0, 50.0, 560.0, 0, 1610612768.0, 8.0, 0, 620.0, 656.0, 4.0, 4096.0, 51.0, 0, 0, 0.0, 28.0, 0, 616.0, 0, 296.0, 2.0, 632.0, 468.0, 28.0, 32.0, 52.0, 0, 528.0, 0, 28.0, 0.0, 0, 24.0, 18.0, 4096.0, 0, 8.0, 180.0, 664.0, 4319158.0, 26.0, 0.0, 6.0, 0, 4096.0, 472.0, 0, 28.0, 72.0, 464.0, 672.0, 0, 24.0, 4.0, 0, 28680.0, 0, 0, 18.0, 0, 0, 4319159.0, 24.0, 28.0, 16.0]

我使用Tflearn来尝试根据这些数据创建一个分类模型,例如,每个条目都有一个0或1的标签,我正试图训练模型来预测未知条目是0还是1。以下是我的代码摘要:

^{pr2}$

我基于下面的TFlearnexample。这个程序很好地处理了250 0和250 1的小数据集。我有高80%的准确率,我认为增加更多的数据将有助于提高准确性。然而,在加入了大量的数据之后,损失很快就消失了。甚至连45万次迭代都没有。经过一番研究,我发现我的学习率可能太高了,因为我已经让它违约了。我把它设置在0.1到0.000001之间,没有什么能阻止损失向NaN的方向发展。我还尝试过将批处理大小更改为1到1024,并将层数更改为3到20。什么也帮不上忙。有没有人知道要改变什么,或者如何以不同的方式来解决这个问题?在

谢谢!在


Tags: 数据代码模型目的列表格式分类条目
1条回答
网友
1楼 · 发布于 2024-10-02 12:32:38

我猜你的网络正在遭受vanishing gradient problem的困扰。这不是神经网络的基本问题,而是由某些激活函数引起的基于梯度的学习方法的问题。让我们试着直观地理解问题及其背后的原因。在

问题

基于梯度的方法通过了解参数值的微小变化将如何影响网络的输出来学习参数的值。如果参数值的变化导致网络输出的变化很小,则网络无法有效地学习参数,这是一个问题。在

这正是在消失梯度问题中发生的事情——网络输出相对于早期层中参数的梯度变得非常小。这是一种很奇特的说法,即使早期层的参数值发生很大的变化,也不会对输出产生很大的影响。让我们试着弄清楚这个问题发生的时间和原因。在

原因

消失梯度问题依赖于激活函数的选择。许多常见的激活函数(如sigmoid或tanh)以非常非线性的方式将其输入“压缩”到非常小的输出范围。例如,sigmoid将实数线映射到[0, 1]的“小”范围内。因此,输入空间中有很大的区域被映射到一个非常小的范围。在输入空间的这些区域中,即使输入的大变化也会在输出中产生小的变化,因此梯度很小。在

当我们将这些非线性的多层叠加在一起时,情况会变得更糟。例如,第一层将大的输入区域映射到较小的输出区域,第二层将映射到更小的区域,第三层映射到更小的区域,依此类推。因此,即使第一层的参数发生很大变化,也不会对输出产生太大的影响。在

我们可以通过使用不具有“压缩”输入空间到一个小区域的特性的激活函数来避免这个问题。一种流行的选择是将x映射到max(0,x)的校正线性单元。在

答案来自Quora上的a post。在

Update: exploding gradient problem

有时在早期的地层中梯度会变得更大,这被称为爆炸梯度问题。例如,如果为权重矩阵选择较大的值,并以使梯度变大的方式设置偏移值,则神经网络将面临爆炸性梯度问题。另一个原因可能是,如果你的数据点本身很大,即使学习率很低,在梯度下降过程中也会产生很大的步长。因此,可以在训练前按列规范化数据点,以避免梯度爆炸问题。在

此外,更大的学习率可能是另一个潜在的原因爆炸梯度问题。我鼓励你看一下这个article,它讨论了关于消失和爆炸梯度问题及其解决方案的基本思想。在

感谢@timleathart的深刻评论。在

相关问题 更多 >

    热门问题