2016-04-22 22 views
1

我正在學習用MATLAB例子NN工具箱,我已經得到了所有的時間誤差出的記憶 - 默認MATLAB數據庫和代碼

內存不足。爲您的 選項鍵入HELP MEMORY。 test2中的錯誤(第10行)xTest = zeros(inputSize,numel(xTestImages));

這裏是我的簡單代碼

% Get the number of pixels in each image 
imageWidth = 28; 
imageHeight = 28; 
inputSize = imageWidth*imageHeight; 

% Load the test images 
[xTestImages, outputs] = digittest_dataset; 

% Turn the test images into vectors and put them in a matrix 
xTest = zeros(inputSize,numel(xTestImages)); 
for i = 1:numel(xTestImages) 
    xTest(:,i) = xTestImages{i}(:); 
end 

代碼是根據 mathwork example書面(但我嘗試做自己的自定義網絡)。我重新安裝matlab,製作最大的java RAM存儲器,清理一些磁盤空間並減少神經網絡的其餘部分。還是行不通。任何想法如何解決這個問題?

+0

numel(xTestImages)的值是多少? – tim

+0

@tim它來自digittest_dataset - 默認的matlab數據庫。 xTestImages是cell 1x5000 – ClassicError

+0

這意味着,'xTest = zeros(inputSize,numel(xTestImages));'將產生一個尺寸爲28^2 * 5000 = 3,920e6個元素的矩陣。每個元素都具有雙精度(8字節),因此矩陣應該只消耗大約30mb ...命令「memory」的輸出顯示了什麼? – tim

回答

0

如上寫入,行:

xTest = zeros(inputSize,numel(xTestImages)); # xTestImages is 1x5000 

將產生大小28^2*5000= 3,920e6元件的矩陣。每一個元素都有雙精度(8字節),因此矩陣,將佔用約30MB ...

你所說的那樣,命令memory顯示以下內容:

Maximum possible array: 29 MB (3.054e+07 bytes) 
* Memory available for all arrays: 467 MB (4.893e+08 bytes) 
** Memory used by MATLAB: 624 MB (6.547e+08 bytes) 
Physical Memory (RAM): 3067 MB (3.216e+09 bytes) 

所以第一行顯示的限制一個單一陣列。

那麼幾件事情要考慮:

我知道這不會解決問題,但也許它會幫助你保持在同時工作:您可以創建一個單精度矩陣應該爲你的測試用例工作。在創建矩陣時,只需通過single作爲第二選項。

+0

我退出所有應用程序。 Java堆大小最大值的值。我剛開始使用1000個樣本及其工作。但是當我嘗試在神經網絡中使用它時,我仍然遇到內存耗盡(即使是10個樣本)的問題。 Matlab2015SP1 32位Windows 7 32位。我恐怕也許這只是太低,這個計算:(無論如何,對於這個問題,你的答案是好的。如果我不解決我的神經網絡問題,我創建新的話題。謝謝:) – ClassicError

-1

內存不足是由Levenberg-Marquardt算法創建的 - 當數據很大時,它會爲計算創建巨大的雅可比矩陣。