我正在训练一个深度自动编码器(现在使用5层编码和5层解码,使用泄漏的ReLu)将数据的维数从大约2000个dims减少到2.我可以在10k数据上训练我的模型,结果是可以接受的 当我使用更大的数据(50k到1M)时会出现问题。使用相同的模型与相同的优化器和退出等不起作用,训练在几个时期后卡住。 我试图在优化器上进行一些超参数搜索(我正在使用adam),但我不确定这是否能解决问题。
我应该寻找其他更改/检查的内容吗?在这种情况下,批量大小是否重要?我应该通过微调优化器来解决问题吗? Shoul我玩辍学率? ...
非常感谢任何建议。
P.S。我正在使用Keras。这很方便。如果您不知道,请查看:http://keras.io/
答案 0 :(得分:0)
在尝试找出问题原因时,我会遇到以下问题:
1)如果将中间层的大小从2更改为更大的值,会发生什么?它是否改善了在> 50k训练集上训练的模型的性能?
2)从1M数据集中随机选择10k培训示例和测试示例吗?
我的猜测是你的训练模型根本无法仅使用中间层中的2个维度来解压缩50K-1M数据。因此,模型更容易使其参数适合10k数据,中间层的激活在这种情况下更为明智,但对于> 50k的数据激活是随机噪声。
答案 1 :(得分:0)
经过一番调查后,我意识到我正在使用的图层配置在某种程度上不适合这个问题,这似乎导致了问题的至少部分。
我一直在使用图层序列进行编码和解码。选择的图层大小线性减小,例如:
输入:1764(dims)
hidden1:1176
hidden2:588
编码:2
hidden3:588
hidden4:1176
输出:1764(与输入相同)
然而,这似乎只是偶尔使用,并且它对超参数的选择很敏感。
我试图用指数级递减的图层大小(用于编码)和另一种解码方式替换它。所以: 1764,128,16,2,16,128,1764
现在在这种情况下,培训似乎更加健壮。我仍然需要进行超参数搜索以查看这个是否敏感,但是一些手动试验似乎表明它的稳健性。
如果我遇到其他一些有趣的观点,我会发布更新。