【发布时间】:2013-07-11 18:50:36
【问题描述】:
假设我有非常大的训练集,因此 Matlab 在训练时挂起,或者没有足够的内存来保存训练集。
是否可以将训练集分成几部分,逐部分训练网络?
是否可以一次用一个样本(一个接一个)训练网络?
【问题讨论】:
标签: matlab machine-learning artificial-intelligence neural-network
假设我有非常大的训练集,因此 Matlab 在训练时挂起,或者没有足够的内存来保存训练集。
是否可以将训练集分成几部分,逐部分训练网络?
是否可以一次用一个样本(一个接一个)训练网络?
【问题讨论】:
标签: matlab machine-learning artificial-intelligence neural-network
您可以手动将数据集分成批次并一个接一个地训练它们:
for bn = 1:num_batches
inputs = <get batch bn inputs>;
targets = <get batch bn targets>;
net = train(net, inputs, targets);
end
虽然批量大小应该大于 1,但无论如何这应该会减少训练的内存消耗。
在trainlm 训练算法的情况下,net.efficiency.memoryReduction optim 可能会有所帮助。
此外,您可以尝试使用较少内存消耗的算法,而不是默认的 trainlm 算法,例如 trainrp。
有关训练算法的详细信息,请查看matlab documentation page。
我在上面假设您正在为神经网络使用相应的 matlab 工具箱。
关于一次训练一个样本,您可以尝试在谷歌上搜索随机梯度下降算法。但是,它似乎不在工具箱中的默认训练算法集中。
【讨论】:
train 将为net 创建初始权重,并从它们开始训练一批。但是所有后续调用都将从在前一批训练网络后获得的权重开始训练。所以通常人们应该期望网络准确性的整体提高。