【发布时间】: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