Matlab 为什么当我多次训练一个网络模型时,我会得到不同的训练模型和不同的结果?

Matlab 为什么当我多次训练一个网络模型时,我会得到不同的训练模型和不同的结果?,matlab,neural-network,Matlab,Neural Network,为什么当我为相同的选项和相同的数据库训练网络模型时,我会得到不同的训练模型和结果,结果的分类也不同 1) 我有一个循环来训练n次神经网络模型 2) 我设置了相同的培训选项 3) 我有同样的数据库要训练和测试 4) 我使用相同的预先培训模型(例如google net) 最后,每次(n=1,2,3)我都有不同的分类结果。差距甚至等于10个百分点 数据库-人脸图像(总是读取相同的数据库,而不是随机读取) 模型-我使用了从Matlab预训练的模型,并且只在github的人脸图像上进行预训练 opts

为什么当我为相同的选项和相同的数据库训练网络模型时,我会得到不同的训练模型和结果,结果的分类也不同

1) 我有一个循环来训练n次神经网络模型

2) 我设置了相同的培训选项

3) 我有同样的数据库要训练和测试

4) 我使用相同的预先培训模型(例如google net)

最后,每次(n=1,2,3)我都有不同的分类结果。差距甚至等于10个百分点


数据库-人脸图像(总是读取相同的数据库,而不是随机读取) 模型-我使用了从Matlab预训练的模型,并且只在github的人脸图像上进行预训练

opts = trainingOptions('sgdm', ...
    'MaxEpochs',1, ... %5  50
    'MiniBatchSize',100,... %64  10
    'InitialLearnRate',5e-5,... 
    'ExecutionEnvironment','gpu',...
    'Shuffle','every-epoch', ...
    'Plots','training-progress');

如果某些选项未标识,则表示默认设置。

您的脚本未完全由您提到的参数定义。 此外,还涉及到随机种子。使用预训练模型时,应重新初始化最后几层。使用完全预训练参数往往会导致收敛到坏的局部极小值

也许你已经这么做了,那么随机性就从那里来了。此外,我认为你的训练是分批进行的。如果不指定随机种子,则每次运行的批处理都是不同的,因为每个批处理包含的实例都是根据随机种子选择的


以不同的顺序向NN呈现训练实例会导致不同的结果。

我已更改了最后一层(分类和完全连接)。如何更改matlab以获取相同的种子组。使用“rng(0)”,此处提供更多信息:在脚本开始时,为了加快计算速度,我更改了基础(静态人脸热人脸图像)和选项,但是,我按照说明使用了rng(0)。当然,我在同一个数据库中教了三次同样的东西,并测试了三次。。。我从分类功能中得到了以下结果:83.62%(首次获得的训练模型)、82.85%(第二次获得的训练模型)、83.29%(第三次获得的训练模型),但我也检查了我之前已经分析过的内容。事实证明,当您将LearningRate选项从3e-5更改为3e-3时,结果更加多样化。71.24%,66.95%,63.74%可能是第二次研究表明模型拟合不足。所以学习率没有影响我的分数差异。数据是关于什么的?您的培训数据集有哪些功能?分类的准确性是否也在波动?数据库是来自红外范围的人脸图像。最后,当我使用分类函数时,我得到了以相同方式训练的模型的不同结果,例如,第一个模型我有85个精度,第二个模型(相同的训练、相同的模型和相同的训练数据集)我得到了大约76个结果。