【问题标题】:LS-SVM training : Out of memoryLS-SVM 训练:内存不足
【发布时间】:2014-01-23 19:44:57
【问题描述】:

我尝试在具有以下大小的数据集上训练 LS-SVM 分类器:

训练数据集:TS = 48000x12(双)
组:G = 48000x1(双)

Matlab 训练代码为:

class = svmtrain(TS,G,'method','LS',...
                 'kernel_function','rbf','boxconstraint',C,'rbf_sigma',sigma);

然后,我收到以下错误消息:

使用 svmtrain 时出错(第 516 行)
评估内核函数“rbf_kernel”时出错。

原因:
使用 repmat 时出错
内存不足。键入 HELP MEMORY 作为您的选项。

请注意,物理内存的大小为 4Gb,当我减小数据集训练大小时它可以工作。因此,如果有任何解决方案具有相同的数据大小,当然不增加物理内存。

【问题讨论】:

  • 你的训练集中有多少个类?
  • @lejlot:svmtrain Matlab 函数只适用于二进制分类,所以我只有两个类。
  • 您或许可以在 Scala 中为 SVM 使用 Breeze。我不喜欢任何东西的不可扩展的解决方案,而且 Matlab 总是无法扩展。我建议你进入spark.incubator.apache.org/docs/latest/mllib-guide.html
  • 不确定是否可行,但也许可以使用较小的数据类型,例如我会尝试Singleint8。当然,请确保您的记忆中没有不必要的东西。另请确认您正在运行 64 位 matlab。请参阅here 为什么。
  • @DennisJaheruddin:感谢您的评论。是的,我正在运行 64 位 Matlab,即使我尝试使用 single 数据类型为 double 的数据类型,问题也是一样的。

标签: machine-learning classification svm matlab


【解决方案1】:

看来,该实现需要计算整个 Gram 矩阵,在您的情况下,它是 N x N(其中 N - 样本数)的大小,它是 2,304,000,000,现在每个都由 32 位浮点数表示,这意味着它至少需要 4 个字节,这给出了所需的 9,216,000,000 字节,这大约是一个 Gram(内核)矩阵的 9GB 数据。

有两种选择:

【讨论】:

  • 感谢您的回复。但是你是如何计算数字 N 的呢? (知道我有 48000 个样本用于训练和 12 个特征)
  • N = 48000,所以 N*N = 2,304,000,000
  • 你回答的第二个选项有用,但不能解决问题,因为当我尝试集成开发的C函数时(mex编译后),Matlab遇到内部问题需要关闭.此外,我更喜欢保留使用 Matlab 函数(特别是用于训练和测试的 Matlab SVM 函数)的解决方案。感谢您的有用建议。
猜你喜欢
  • 1970-01-01
  • 2015-07-04
  • 2015-05-04
  • 2015-07-25
  • 2021-08-04
  • 2012-11-03
  • 2015-04-18
  • 2015-01-22
相关资源
最近更新 更多