Matlab 神经网络训练



执行以下代码有什么区别?修改训练结构中的 epoch 还是将训练函数放在循环中更好?谢谢

第一个代码:

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

第二个代码:

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

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

假设是这种情况,基本上会发生的情况是,在你的第一段代码中,它只会在上一次迭代中采用训练好的网络,并将其用于下一次迭代。 这是假设培训没有收敛,它应该简单地在培训方面"从中断的地方"开始。 在第二段代码中,您将在开始时设置收敛所需的迭代总数,并只允许训练发生一次。

如果出现这种情况使得很难训练您的网络,并且我们达到了您的for循环中每次迭代的最大迭代次数/epochs,那么就不会有区别。


但是,根据您的输入和目标,训练神经网络所需的时间可能少于您设置的最大 epoch 数。 例如,是否应将最大纪元数设置为 ...说。。。100,在循环的第一次迭代中只用了 35 个 epoch 来训练,之后的下一次迭代根本不会改变网络,因此会有不必要的计算。

因此,如果你的网络很容易训练,那么只需使用第二段代码。 如果您的网络很难训练,那么简单地使用第二段代码设置最大 epoch 的数量并一次性训练可能还不够。 因此,如果你有一个更难训练的网络,而不是设置大量的周期,这可能需要一些时间才能收敛,明智的做法是减少总周期的数量并将其放入一个for循环中,而不是增量更改。


因此,如果你想从中得到一些东西,如果你可以看到网络相当容易训练,请使用第二段代码。 使用第一段代码,减少纪元数,但将其放入for循环中,以便训练更难的网络。

最新更新