4

假设我有非常大的训练集,这样Matlab在训练时挂起或者没有足够的内存来存放训练集。如何在Matlab中逐步训练神经网络?

是否可以将训练集分成几部分并按部分训练网络?

是否有可能一次训练一个样本的网络(一个接一个)?

回答

5

您只需手动分割数据集成批次,培养他们一个一个后:

for bn = 1:num_batches 
    inputs = <get batch bn inputs>; 
    targets = <get batch bn targets>; 
    net = train(net, inputs, targets); 
end 

虽然批量大小应大于1,但无论如何应该减少内存单耗进行培训。

如果是trainlm培训alogrithm,net.efficiency.memoryReduction优化可以帮助。 而不是默认的trainlm算法,你可以尝试更少的内存消耗,如trainrp。 有关训练算法的详细信息,请检查matlab documentation page。 我上面假设你正在使用相应的神经网络工具箱。

关于一次训练一个样本,您可以尝试使用Google随机梯度下降算法。但是,它看起来不是工具箱中默认的训练算法集。

+0

在每次迭代中都不会写上前面的“net”,而是在其上面写下它? – Alper

+0

@Avatar第一次调用'train'会为'net'创建初始权重,并从它们开始训练一批。但随后的所有呼叫都将从之前批次的训练网络获得的权重开始训练。所以通常应该期望整体网络准确度的提高。 – akademi4eg

+0

培训一批是什么意思?就像每次培训的100部分数据?不应该使用adapt()函数吗? 在我的实验中,我观察到,当我迭代地训练数据时,权重开始呈现数据训练部分的形状,并且覆盖到之前已经训练过的权重。我无法克服这个问题。你有什么建议吗? – Alper