【问题标题】:Training Keras neural network with sparse data用稀疏数据训练 Keras 神经网络
【发布时间】:2017-02-20 00:15:14
【问题描述】:

我正在尝试使用Keras 训练神经网络。 我的训练集由数百万个稀疏向量组成。

为了进行训练,我使用了 model.fit() 函数:

model.fit(X_train, y_train, ...)

但是,fit() 对密集数据进行操作。因此,为了使其工作——在向网络提供向量之前——我将它们转换为密集向量。

问题是转换后数据变得太大,不再适合 RAM。

我知道我可以使用batch_generator 来为网络提供数据块。但是,当我这样做时,我得到的结果(在测试集上)比仅在 部分 数据上没有batch_generator 的情况下运行更糟糕(因此它确实适合 RAM)。

我的问题是:有没有办法用稀疏向量训练 Keras 神经网络,而不将它们转换为密集向量?

【问题讨论】:

  • 通过生成器拟合应该产生与直接在 x/y 数组上拟合相同的结果。也许您认为更好的结果实际上是过度拟合的情况(在数据的小子集上)。
  • 我用另外一套做测试,挺大的。为什么过拟合会在测试集上表现更好?这没有任何意义......
  • 您的帖子没有明确说明您是指火车上的性能还是测试集上的性能。另外,fit() 默认情况下会打乱您的数据,请确保您的生成器在某些时候也会这样做。

标签: machine-learning neural-network keras


【解决方案1】:

如果您能够使用 Lasagne 而不是 Keras,您可以查看 this Multilayer Perceptron class,它非常可配置且易于阅读。

同时支持密集和稀疏矩阵

支持drop-out和hidden layer

支持完整的概率分布而不是单热标签,因此支持多标签训练。

支持类似 scikit-learn 的 API(拟合、预测、准确性等)

非常容易配置和修改

【讨论】:

    猜你喜欢
    • 2018-07-21
    • 1970-01-01
    • 2017-11-27
    • 2011-04-07
    • 1970-01-01
    • 2018-07-25
    • 2019-12-17
    • 2012-04-02
    • 2018-08-19
    相关资源
    最近更新 更多