【问题标题】:'Out of memory' error in MatlabMatlab中的“内存不足”错误
【发布时间】:2015-06-26 03:58:56
【问题描述】:

我知道这是一个很常见的问题,但我尝试过的所有解决方案都失败了。

基本上我想训练一个大型神经网络,但我得到“内存不足”错误。

我的训练集是一个 729 x 3456 双精度矩阵,神经网络是一个所谓的“自动编码器”,具有这些大小的层

3456 - 4000 - 2000 - 1000 - 300 - 1000 - 2000 - 4000 - 3456

在我的代码中,首先我会做

net = feedforwardnet([layer1, layer2, layer3, layer4, layer3, layer2, layer1], 'trainscg');
net = configure(net, Dtrain', Dtrain');

我在哪里使用“trainscg”函数,因为我读到它是使用较少内存的函数。 然后我根据一些值(我已经计算过)初始化权重和偏差,设置“transferFcn”并开始训练。

我尝试尽可能多地清洁工作区,我也尝试放置

net.efficiency.memoryReduction = 4;

在训练之前,因为我读过它会有所帮助。无论如何,即使我将值增加到 60,我仍然有“内存不足”。

这是命令“memory”的输出,当工作区仅包含训练集和四个数字(层的大小)时执行

>> memory
Maximum possible array:      4508 MB (4.727e+09 bytes) *
Memory available for all arrays:      4508 MB (4.727e+09 bytes) *
Memory used by MATLAB:      1927 MB (2.020e+09 bytes)
Physical Memory (RAM):      8080 MB (8.472e+09 bytes)

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

我还能做些什么来解决这个问题?

【问题讨论】:

  • 不是 Matlab 专家,但 configure(net, Dtrain', Dtrain') 不应该是 configure(net, Dtrain, 'Dtrain')
  • 感谢您的回复,但不这么认为。 Dtrain 是我的训练集,以行为主的方式组成。所以我只是转置它,因为 Matlab 使用列专业。该函数的第二个和第三个参数只是输入和期望的输出,由于这个网络是一个自动编码器,它们必须重合。
  • @Xufox no the ' 操作符是转置操作符
  • @minomic 您在什么操作系统和架构(32/64 位)上运行 Matlab?
  • 您是否通过断点或有选择地注释掉了导致错误的行?只有两行代码,很难说出问题的原因。它在传递较小的数组数组时有效吗?对于外行来说,这些层与训练集有什么关系?

标签: matlab neural-network


【解决方案1】:

您可以检查数据的数据类型以及该数据类型使用的内存。尝试使用内存要求最低的那个。例如:对于相同的数字,double 占用 8 个字节,而 single 占用 4 个字节。您可以使用 whos 命令查看内存使用情况。

此外,您可以在运行代码之前从任务管理器中检查系统的性能,如下图所示。可能是您系统上的其他进程占用了大部分内存,可以停止。

【讨论】:

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