最近尝试采用matlab中的神经网络工具包做些试验,但是数据的规模比较大,在模型训练的过程中,总是返回“Out Of Memory”错误,而不能继续训练。尝试了几种可能的解决方案,最后总算解决,至少运行到现在还没有出现这种错误。
- 增加虚拟内存:在查看任务管理器发现物理内存为2GB,虚拟内存为共6GB,而观察matlab在运行过程中使用的内存没有超过2GB,因此不存在内存不足的问题。因此增加虚拟内存的方法是不可行的。
- 使用PACK:PACK可以将matlab中的变量导出到磁盘中,以增加可用内存。但是尝试之后,没有解决问题。
- 减少变量的内存开销:目前使用的变量都是必须的变量,不能再减小了。
- 64位架构:采用64位的软硬件架构,目前实验室条件下不可行。
- 3GB切换(3GB switch):由于在windows上运行matlab时,如果内存的使用超过约1.7G左右就要出现这种错误,而无论你有多大的内存也没用。幸好现在在Windows XP上,MATLAB现在支持3GB切换(3GB switch)启动选项(boot option),配置额外的1GB的可寻址内存到每个程序上。这增加了你可以储存到MATLAB workspace中资料的总量约到2.7 GB。这相当于33亿的精度值。此新增的内存区块和MATLAB使用剩下的(内存)并不是连续的,所以你不能建立一个数组来填满此空间。
具体做法:修改C:\ Boot.ini文件如下:
[boot loader]
timeout=30
default=multi(0)disk(0)rdisk(0)partition(2)\WINNT
[operating systems]
multi(0)disk(0)rdisk(0)partition(2)\WINNT="????" /3GB
注意后面的/3GB就是后加上的。重新启动系统再次运行matlab。
在采用了最后这种方法时,问题解决,至少运行了一段时间还没有出现上面的错误。
参考:
[1] http://www.microsoft.com/whdc/system/platform/server/PAE/PAEmem.mspx
[2] http://www.mathworks.com/support/tech-notes/1100/1106.shtml
[3] http://www.terasoft.com.tw/news/data/news041203.asp
[4] http://blog.sina.com.tw/872/article.php?pbgid=872&entryid=17053