4
假设我有非常大的训练集,这样Matlab在训练时挂起或者没有足够的内存来存放训练集。如何在Matlab中逐步训练神经网络?
是否可以将训练集分成几部分并按部分训练网络?
是否有可能一次训练一个样本的网络(一个接一个)?
假设我有非常大的训练集,这样Matlab在训练时挂起或者没有足够的内存来存放训练集。如何在Matlab中逐步训练神经网络?
是否可以将训练集分成几部分并按部分训练网络?
是否有可能一次训练一个样本的网络(一个接一个)?
您只需手动分割数据集成批次,培养他们一个一个后:
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随机梯度下降算法。但是,它看起来不是工具箱中默认的训练算法集。
在每次迭代中都不会写上前面的“net”,而是在其上面写下它? – Alper
@Avatar第一次调用'train'会为'net'创建初始权重,并从它们开始训练一批。但随后的所有呼叫都将从之前批次的训练网络获得的权重开始训练。所以通常应该期望整体网络准确度的提高。 – akademi4eg
培训一批是什么意思?就像每次培训的100部分数据?不应该使用adapt()函数吗? 在我的实验中,我观察到,当我迭代地训练数据时,权重开始呈现数据训练部分的形状,并且覆盖到之前已经训练过的权重。我无法克服这个问题。你有什么建议吗? – Alper