【问题标题】:Matlab - processpca out of memory errorMatlab - processpca内存不足错误
【发布时间】:2014-07-08 16:44:34
【问题描述】:

我必须使用 Neural Network Toolbox400*60000 矩阵(在 64 位 8gb ram 机器上)使用 processpca (讲座练习,我认为这里无法使用替代方案)计算 pca。错误信息是:

Error using eye
Out of memory. Type HELP MEMORY for your options.

Error in processpca.create (line 15)
    settings.transform = eye(R);

Error in processpca (line 60)
[y,settings] = processpca.create(x,param);

Error in pca (line 21)
[trainDataPCA,psPCA] = processpca(trainData);

我的代码是:

% PCA - Reduce feature dimensions to selected dimensions
function [trainDataPCA,trainLabelsPCA] = pca(trainData, trainLabels, nDim)

if nargin < 3 
    print "Exact three arguments needed"
    return
end 

% Reduce nDim to max size of input data
nDimIn = size(trainData,1);
nDimOut = min(nDim,nDimIn);

% Normalise feature  - standard deviation 1, mean 0
trainData = trainData';
trainLabels = trainLabels';
[trainData,trainPS] = mapstd(trainData);

% Calculate PCA
[trainDataPCA,psPCA] = processpca(trainData);
trainDataPCA = trainDataPCA(:,1:nDimOut);

% Map PCA to labels
trainLabelsPCA = processpca('apply',trainLabels,psPCA);
trainLabelsPCA = trainLabelsPCA(:,1:nDimOut);

trainDataPCA = trainDataPCA';
trainLabelsPCA = trainLabelsPCA';

在这种情况下我该怎么办?

编辑:我的记忆:

Maximum possible array:      9861 MB (1.034e+10 bytes) *
Memory available for all arrays:      9861 MB (1.034e+10 bytes) *
Memory used by MATLAB:       680 MB (7.128e+08 bytes)
Physical Memory (RAM):      8187 MB (8.585e+09 bytes)

*  Limited by System Memory (physical + swap file) available.

【问题讨论】:

  • 400 x 60000 是一个相当大的矩阵,如果它是full。看起来当您使用processpca 时,它还在尝试分配与400 x 60000 相同大小的矩阵,然后再继续训练您的数据。您将很快耗尽内存。您可以做的一件事是尝试增加 Java 堆大小。这是在黑暗中拍摄,但它可以工作:进入你的Preferences -&gt; General -&gt; Java Heap Memory。尽可能多地发挥它。
  • Mhh 将堆内存设置为 2046,但这并没有帮助。该矩阵有 60000 个数字的 400 个灰度值,从我的观点来看,其中有很多空值。我可以在这里优化一些东西吗?
  • 您是否尝试过使用sparsemathworks.com/help/matlab/ref/sparse.html。拿你的矩阵做sparse(A);A 是你的矩阵。 sparse 用于表示具有许多零元素的矩阵。这可以为您节省一些内存。希望 NN Toolbox 也接受 sparse 矩阵作为有效输入。我很长时间没有使用 NN Toolbox,所以在这里我无法提供任何见解。顺便说一句,您是否使用 MNIST 数据库进行手数识别?他们的补丁是 20 x 20 和 60000 张测试图像,所以每张图像 400 像素看起来很熟悉。
  • 不,还没有尝试过,感谢您的提示。是的,我正在使用 MNIST 数据库对使用神经网络的模式识别进行一些基本调查。
  • 只是关于增加 Java 堆大小的简要说明;实际上,这会产生不利影响,因为它会为 Java 保留内存,而这会从可用于其他事物的总内存中拿走。在这种情况下,算法是在 MATLAB 而不是 Java 中实现的。事实上,它最终会调用完成大部分工作的svd 函数。阅读源代码,processpca 的实现与我在这篇文章中展示的类似:stackoverflow.com/a/3181851

标签: matlab out-of-memory pca


【解决方案1】:

我在完全相同的硬件上使用相同的数据集时遇到了同样的问题。我增加了我的一个驱动器上的 Windows 虚拟内存大小,使其落在 [10GB-30GB] 范围内。重启windows并运行matlab后,一切正常。

【讨论】:

    猜你喜欢
    • 2011-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-26
    • 2016-04-30
    • 2013-06-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多