Matlab神经网络训练

时间:2014-12-22 22:09:09

标签: matlab artificial-intelligence neural-network

执行以下代码有何不同?最好修改训练结构中的时期或将训练函数放在循环中? 谢谢

第一个代码:

for(i=1:10)
    % Train the Network
    [net,tr] = train(net,inputs,targets);
end

第二段代码:

net.trainParam.epochs = 200;
[net,tr] = train(net,inputs,targets);

1 个答案:

答案 0 :(得分:0)

如果您为训练提供的输入和目标描述的是非常难以训练的模型,那么理论上第一个和第二个代码之间没有区别。这假设您的网络正在接受培训,并在for循环中为每次迭代达到最大迭代次数/时期

假设是这种情况,基本上会发生的是,在第一段代码中,它只需要在前一次迭代中使用训练好的网络,并将其用于下一次迭代。这假设训练没有收敛,它应该只是在训练方面选择“停止的地方”。在第二段代码中,您将在开始时设置收敛所需的迭代总数,并且只允许一次训练。

如果出现这样的情况,那么很难训练您的网络,并且我们在for循环中达到每次迭代的最大迭代次数/纪元数,那么就没有区别了。


但是,根据您的输入和目标,训练您的神经网络可能需要少于您设置的最大历元数。例如,如果您将最大纪元数设置为......比如... 100,并且在循环的第一次迭代中仅需要35个纪元进行训练,那么之后的下一次迭代将根本不会改变网络,因此会有不必要的计算结果。

因此,如果您的网络很容易训练,那么只需使用第二段代码即可。如果你的网络很难训练,那么只需用第二段代码设置最大纪元的数量并一次性训练它可能是不够的。因此,如果您有一个更难以训练的网络,而不是设置可能需要时间收敛的大量时期,那么减少总时期的数量并将其放入for循环可能是明智的。用于增量变化。


因此,如果您想从中获取一些东西,请使用第二段代码,如果您可以看到网络训练相当简单。使用减少了一些时期的第一段代码,但将其置于for循环中,以便更难训练网络。